Hi gaes, kali ini saya ingin berbagi pengalaman melakukan troubleshooting terkait upload image di android 13. Singkat cerita aplikasi mobile yang saya bangun sudah lama berjalan stabil di android versi 8 s.d 12, namun petaka muncul mana kala android 13 launching, dan salah satu dampak yang terkena adalah proses pembacaan real path setelah berhasil melakukan file picker, muncul error seperti ini
error Invalid URI: content://media/picker/0/com.android.providers.media.photopicker/media/
Real path adalah versi full path alamat file yang bisa kita gunakan untuk melanjutkan proses upload, untuk versi android 12 ke bawah menggunakan;
DocumentsContract.getDocumentId(uri)
berikut fungsi lengkapnya;
@SuppressLint("Range") fun getImageRealPath(uri: Uri): String? { wholeID = DocumentsContract.getDocumentId(uri) // Split at colon, use second item in the array id = wholeID.split(":").toTypedArray()[1] column = arrayOf(MediaStore.Images.Media.DATA) // where id is equal to sel = MediaStore.Images.Media._ID + "=?" cursor = context.contentResolver.query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, column, sel, arrayOf(id), null ) cursor?.let { if (it.moveToFirst()) { filePath = it.getString(it.getColumnIndex(column[0])) } it.close() } return filePath }
versi android 13 ke atas menggunakan
context.contentResolver.query(contentURI, null, null, null, null)
berikut fungsi lengkapnya;
fun getImageRealPath13(context: Context, contentURI: Uri): String? { val result: String? val cursor: Cursor? = context.contentResolver.query(contentURI, null, null, null, null) if (cursor == null) { // Source is Dropbox or other similar local file path result = contentURI.path } else { cursor.moveToFirst() val idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA) result = cursor.getString(idx) cursor.close() } return result }
Selamat mencoba!