ContentResolver.openAssetFileDescriptor выбрасывает java.io.FileNotFoundException: нет записи для содержимого: // media / external / audio / media - PullRequest
0 голосов
/ 26 июня 2019

Я в процессе обновления моего приложения для использования правильного ввода-вывода на основе URI, и у меня возникли некоторые проблемы с Uris, полученным из Android MediaStore.

По сути, мое приложение позволяет пользователю выбрать песню из Media Store. Затем я открываю для этого файла только для чтения AssetFileDescriptor, который затем использую для чтения файла. Это работает отлично по большей части; тем не менее, я все еще получаю значительное количество отчетов о сбоях от пользователей. В этой строке выдается исключение:

AssetFileDescriptor des = contentResolver.openAssetFileDescriptor(uri, "r");

Трассировка стека выглядит следующим образом:

java.io.FileNotFoundException: No entry for content://media/external/audio/media/[ID]
at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:144)
at android.content.ContentProviderProxy.openTypedAssetFile(ContentProviderNative.java:698)
at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1473)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1310)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1233)

Я уверен, что URI действителен, поскольку он извлекается непосредственно из MediaStore. Кажется, что исключение говорит, что нет никакого файла, на который указывает uri, но то, что сбивает с толку, - то, почему эта запись в MediaStore существует, если она не поддерживается каким-либо файлом.

Я искал и нашел очень мало документации, связанной с сообщением No entry for content. (В основном случайные ТАК вопросы с несколькими полезными ответами.) Буду признателен, если кто-нибудь сможет объяснить, почему это происходит.

Если решение невозможно, могу ли я узнать, какие записи MediaStore не поддерживаются файлом, не открывая их? Кажется плохим UX даже показывать эти песни пользователю, если они не могут быть открыты приложением.

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...