В соответствии с путем к файлу docs доступ предоставляется в Android R:
Начиная с Android 11, приложения, имеющие разрешение READ_EXTERNAL_STORAGE, могут читать медиа-файлы устройства, используя прямые пути к файлам и родные библиотеки. Эта новая возможность позволяет вашему приложению работать более гладко со сторонними медиа-библиотеками.
Проблема в том, что я не могу получить путь к файлу от MediaStore
, так как мы должны читать путь к файлу, к которому мы не можем получить доступ / получить? Есть ли способ, о котором я не знаю, что мы можем получить путь к файлу от MediaStore
?
Кроме того, документы говорят следующее :
Доступ ко всем файлам
Некоторые приложения имеют основной вариант использования, который требует широкого доступа к файлам, например, управление файлами или операции резервного копирования и восстановления. Они могут получить доступ ко всем файлам, выполнив следующие действия:
- Объявите разрешение MANAGE_EXTERNAL_STORAGE.
- Направьте пользователей на страницу настроек системы, где они могут включить параметр Разрешить доступ для управления всеми файлами. для вашего приложения.
Это разрешение предоставляет следующее:
- Доступ для чтения и записи для всех файлов в общем хранилище.
- Доступ к содержимому таблицы MediaStore.Files.
Но мне не нужен доступ ко всем файлам, я только хочу, чтобы пользователь выбрал видео из MediaStore
и передал путь к файлу FFmpeg
(требуется путь к файлу). Я знаю, что больше не могу использовать столбец _data
для получения пути к файлу.
Обратите внимание:
- Я знаю, что
Uri
возвращается из MediaStore
и не указывает на файл. - Я знаю, что могу скопировать файл в каталог своего приложения и передать его в
FFmpeg
, но я мог бы сделать это до Android R. - Я не могу передать
FileDescriptor
на FFmpeg
и не могу использовать /proc/self/fd/
(я получаю /proc/7828/fd/70: Permission denied
при выборе файла на SD-карте), посмотрите эту проблему .
Так что я должен делать, я что-то упустил? Что подразумевалось под can read a device's media files using direct file paths and native libraries
?