Большинство приложений, которым требуется доступ к общему хранилищу, могут следовать рекомендациям по обмену медиафайлами и обмену другими файлами. Однако некоторым приложениям для работы основной функции требуется широкий доступ к файлам на устройстве, но они не могут получить его, используя рекомендуемые методы хранения, обеспечивающие конфиденциальность. Для таких случаев в Android предусмотрен специальный доступ для приложений, который называется Доступ ко всем файлам.
Например, антивирусному приложению может требоваться регулярно сканировать множество файлов в разных каталогах. Если для сканирования пользователю нужно постоянно выбирать каталоги в окне выбора файлов, это может быть неудобно. Аналогичные соображения применимы и к другим типам приложений, например файловым менеджерам, приложениям для резервного копирования и восстановления, а также приложениям для управления документами.
Запрос доступа ко всем файлам
Чтобы запросить у пользователя доступ ко всем файлам, выполните следующие действия:
- Объявите разрешение
MANAGE_EXTERNAL_STORAGEв манифесте. - Используйте действие intent
ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION, чтобы перенаправлять пользователей на страницу системных настроек, где они могут включить для вашего приложения параметр Разрешить доступ к управлению всеми файлами.
Чтобы определить, предоставлено ли вашему приложению разрешение MANAGE_EXTERNAL_STORAGE, вызовите Environment.isExternalStorageManager().
Операции, разрешенные MANAGE_EXTERNAL_STORAGE
Разрешение MANAGE_EXTERNAL_STORAGE предоставляет следующие возможности:
Доступ на чтение и запись ко всем файлам в общем хранилище.
Доступ к содержимому таблицы
MediaStore.Files.Доступ к корневому каталогу USB-накопителя OTG и SD-карты.
Доступ на запись ко всем каталогам во внутреннем хранилище, кроме
/Android/data/,/sdcard/Androidи большинства подкаталогов/sdcard/Android. Доступ на запись включает доступ по прямому пути к файлу.Приложения, которым предоставлено это разрешение, по-прежнему не могут получить доступ к каталогам других приложений, поскольку эти каталоги отображаются как подкаталоги
Android/data/в хранилище.
Приложение с разрешением MANAGE_EXTERNAL_STORAGE может получать доступ к этим дополнительным файлам и каталогам с помощью API MediaStore или прямых путей к файлам. Однако при использовании Storage Access Framework вы можете получить доступ к файлу или каталогу, только если для этого не требуется разрешение MANAGE_EXTERNAL_STORAGE.
Вызов действия по управлению хранилищем другого приложения
В Android 12 (уровень API 31) и более поздних версиях приложения, у которых есть разрешения MANAGE_EXTERNAL_STORAGE и QUERY_ALL_PACKAGES, например файловые менеджеры, могут использовать getManageSpaceActivityIntent(), чтобы перенаправлять пользователей в специальный раздел управления хранилищем другого приложения.
Метод getManageSpaceActivityIntent() принимает название пакета и код запроса и возвращает одно из следующих значений:
PendingIntent, если в приложении с указанным названием пакета определено действие "Управление хранилищем". Приложение для управления файлами, которое вызвало методgetManageSpaceActivityIntent(), может затем вызвать возвращенное намерение, чтобы перенаправить пользователей к специальному действию.null, если в приложении с указанным названием пакета не определено действие "Управление хранилищем".
Включить MANAGE_EXTERNAL_STORAGE для тестирования
Чтобы узнать, как разрешение MANAGE_EXTERNAL_STORAGE влияет на ваше приложение, вы можете включить его для тестирования. Для этого выполните следующую команду на компьютере, подключенном к тестовому устройству:
adb shell appops set --uid PACKAGE_NAME MANAGE_EXTERNAL_STORAGE allow
Уведомление от Google Play
В этом разделе приведено уведомление для разработчиков, которые публикуют приложения в Google Play.
Чтобы ограничить широкий доступ к общему хранилищу, мы обновили правила Google Play. Теперь мы проверяем приложения, которые предназначены для Android 11 (уровень API 30) или более поздней версии и запрашивают доступ ко всем файлам с помощью разрешения MANAGE_EXTERNAL_STORAGE. Эти правила действуют с мая 2021 года.
Если приложение предназначено для Android 11 или более поздней версии и в нем объявлено разрешение MANAGE_EXTERNAL_STORAGE, Android Studio показывает предупреждение, как на рисунке 1. Это предупреждение напоминает вам, что в Google Play действуют правила, ограничивающие использование разрешения.
MANAGE_EXTERNAL_STORAGE.
Запрашивайте разрешение MANAGE_EXTERNAL_STORAGE, только если в приложении нельзя использовать API, которые лучше защищают конфиденциальность, например платформу доступа к хранилищу или MediaStore API. Разрешение должно применяться только в определенных случаях и только для работы основных функций приложения. Если ваше приложение используется в целях, похожих на перечисленные ниже, то, скорее всего, оно может запрашивать разрешение MANAGE_EXTERNAL_STORAGE.
- Файловые менеджеры
- Резервное копирование и восстановление
- Защита от вирусов
- Приложения для управления документами
- Поиск по файлам на устройстве
- Шифрование дисков и файлов
- Перенос данных с одного устройства на другое