Storage Access Framework Аудио вкладка «Носитель только для чтения» - PullRequest
4 голосов
/ 26 мая 2019

при попытке получить URI для редактирования аудиофайла через Storage Access Framework, если пользователь выбирает на вкладке Audio, я получаю java.lang.IllegalArgumentException: Media is read-only.

SAF отлично работает для получения URI в корне sdcard, а также для выбора файлов из самого тома хранилища. Тем не менее, выбор на вкладке Audio SAF Picker's возвращает URI только для чтения. В настоящее время у меня есть сообщение, в котором пользователям предлагается выбирать только сам том, однако мои отчеты показывают, что они все еще используют его довольно часто.

Вот как я сейчас вызываю SAF-пикап:

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("audio/mpeg");
startActivityForResult(intent, REQUEST_CODE_SAF_READ_FILE);

Согласно документации Android, при использовании Intent.CATEGORY_OPENABLE,

Все выбранные документы возвращаются вызывающему приложению с постоянными разрешениями на чтение и запись ...

- вот почему так удивительно получение ошибки только для чтения.

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

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

... это называется "Отображаемое имя". Это зависит от поставщика и не обязательно может быть именем файла.

Любые предложения приветствуются.

...