はじまり
Android のアプリを作成していて、 ユーザーに画像を一枚選択してもらい、その画像に対してあれこれしたい。みたいな時があるかと思います。そんなときのための記事です。
プログラムの流れの解説
- 開きたい画像を選択させる Intent を飛ばす
- ユーザーは開きたい画像を選択する
- 選択され、 アプリに返ってきた Intent から必要な情報の取り出し・変換をする
コード
MainActivity.kt
UploadImage.setOnClickListener { val intent: Intent = Intent(Intent.ACTION_GET_CONTENT).apply { type = "image/*" addCategory(Intent.CATEGORY_OPENABLE) } startActivityForResult(intent, 6542) Toast.makeText(this, "Open Garally", Toast.LENGTH_LONG).show() } --- override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { if (requestCode == 6542) { if (resultCode != Activity.RESULT_OK) { return } val imageData = data?.data ?: return val imageURL: String = if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) { val docID = DocumentsContract.getDocumentId(imageData) val strSplittedDocId = docID.split(":") val strId = strSplittedDocId[strSplittedDocId.size - 1] val cursor = contentResolver.query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, arrayOf(MediaStore.MediaColumns.DATA), "_id=?", arrayOf<String>(strId), null ) cursor.moveToFirst() cursor.getString(0) } else { val projection = arrayOf(MediaStore.MediaColumns.DATA, MediaStor val corsor = contentResolver.query(imageData, projection, null, if (!corsor.moveToFirst()) return val imageURL = corsor.getString(0) ?: "" corsor.close() imageURL } Toast.makeText(this,"URL; " + imageURL?:"",Toast.LENGTH_LONG) } }