при попытке получить 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, но в соответствии с документами
... это называется "Отображаемое имя". Это зависит от поставщика и не обязательно может быть именем файла.
Любые предложения приветствуются.