Исключение FileNotFound при попытке получить доступ к файловому дескриптору для изображения, снятого камерой, используя uri содержимого в Android

#android #android-camera #android-camera2 #android-contentresolver

#Android #android-камера #android-camera2 #android-contentresolver

Вопрос:

Я написал код для получения файлового дескриптора изображения, снятого камерой в Android.

 if (file.exists()) {
                val values = ContentValues()
                values.put(MediaStore.Images.Media.DATA, filePath)
                return context.contentResolver.insert(
                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)
            } else {
                null
            }
 

Это возвращает uri содержимого для изображения, захваченного камерой. Когда я пытаюсь получить дескриптор файла с помощью
context.ContentResolver.openFileDescriptor(contentUri, «r», null), он выдает исключение FileNotFound.

Приведенный выше код работал в targetSdk 28. После обновления targetSdk до 29 я получаю исключение FileNotFound.

Комментарии:

1. На Android 10 . Столбец ДАННЫХ не должен использоваться.

2. This returns the content uri for the image captued by camera. Это больше похоже на: This returns the content uri for the image to be captued by camera.

3. Что такое путь к файлу? Откуда вы это взяли? Как вы настроили ‘ file ?

4. После захвата фотографии я сохраняю файл фотографии внутри /Android/data/<my-app-package-name> . После этого я пытаюсь получить uri содержимого из этого файла фотографии

5. Если у вас уже есть файл, вы не сможете впоследствии запросить uri в хранилище мультимедиа с помощью insert(), поскольку это создаст новый файл. Используйте FileProvider, если вам нужен uri схемы содержимого. Кроме того, хранилище мультимедиа хранит свои данные в каталоге вашего приложения.