はじまり
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)
}
}