У меня есть небольшая функция для фотографирования:
private fun takePhoto() {
val values = ContentValues(1)
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")
imageUri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values)
val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
if(intent.resolveActivity(packageManager) != null) {
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri)
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
startActivityForResult(intent, REQUEST_IMAGE_CAPTURE)
}
}
После съемки
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
doAsync {
when (requestCode) {
REQUEST_IMAGE_CAPTURE -> {
if (resultCode == AppCompatActivity.RESULT_OK) {
try {
val b1cam = MediaStore.Images.Media.getBitmap(applicationContext.contentResolver, imageUri)
} catch (e: Exception) {
Log.e(TAG , e.toString())
}
.....
Этот код прекрасно работает на телефоне Nexus (с android 9) но не работает на android 10 телефоне Samsung.
Я получаю исключение: java .io.FileNotFoundException: java .io.FileNotFoundException: нет элементов в содержимом: // media / external / images / media / 21674
Когда Я получаю реальный путь в takePhoto, я получаю правильный путь и имя файла, и изображение там. Когда я пытаюсь получить путь в onActivityResult, я получаю android .database.CursorIndexOutOfBoundsException: индекс 0 запрошен, с исключением размера 0.
Когда я удаляю папку Pictures и заново создаю ее работает на телефоне android -10 без проблем, но только на некоторое время.
Где моя ошибка? Я думаю, что мы должны работать с contentResolver, а не с реальным путем, или я ошибаюсь?