概要
contentのuriをfileのuriに変換する。
このuriを
content://com.android.providers.media.documents/document/image%3A40
↓
このuriにしたい
/storage/emulated/0/DCIM/Camera/IMG_20210921_232130.jpg
環境
Kotlin 1.5.21
Android Studio Arctic Fox 2020.3.1
macOS Big Sur 11.4
実装
ググるとよく出てくる実装ですが、実は古いバージョン(Android3未満)の実装方法みたいです。
val contentResolver = requireActivity().contentResolver
val columns = arrayOf(
MediaStore.Images.Media.DATA
)
val cursor = contentResolver.query(uri!!, columns, null, null, null)
cursor!!.moveToFirst()
val path = cursor!!.getString(
cursor!!.getColumnIndexOrThrow(
MediaStore.Images.Media.DATA
)
)
cursor!!.close()
Log.d("path", path)
で、新しい実装方法はこちら
val docId = DocumentsContract.getDocumentId(uri)
val id = docId.split(":")[1];
val contentResolver = requireActivity().contentResolver
val columns = arrayOf(
MediaStore.Images.Media.DATA
)
val selection = MediaStore.Images.Media._ID + "=?";
val cursor: Cursor? = contentResolver.query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
columns, selection, arrayOf(id), null
)
cursor!!.moveToFirst()
val path = cursor.getString(
cursor.getColumnIndexOrThrow(
MediaStore.Images.Media.DATA
)
)
cursor.close()
Log.d("path", path)