Разрешения на хранилище в Android: полное руководство

Ошибка «Permission denied» при сохранении файла или пустой список фотографий в галерее стороннего приложения почти всегда означает одно: у программы нет нужного разрешения на доступ к хранилищу. Система Android жёстко контролирует, какие приложения могут читать и изменять файлы, и начиная с Android 10 эта модель была существенно переработана — появился механизм scoped storage (ограниченное хранилище).

В этой статье разберём, какие разрешения на хранилище существуют в Android, чем отличаются READ_EXTERNAL_STORAGE и MANAGE_EXTERNAL_STORAGE, как выдать доступ вручную и что делать, если приложение не видит файлы даже после выдачи разрешений.

Как устроена модель разрешений хранилища в Android

Исторически Android использовал два основных разрешения: READ_EXTERNAL_STORAGE для чтения файлов и WRITE_EXTERNAL_STORAGE для записи. Они относились к «внешнему хранилищу» — общему пространству, доступному всем приложениям, включая встроенную память и SD-карту.

Начиная с Android 10 (API 29) Google внедрила scoped storage. Теперь приложение по умолчанию видит только свою собственную папку в Android/data и те общие каталоги (музыка, фото, документы), к которым ему явно выдан доступ через системный выбор файлов или медиаразрешения. Прямой доступ ко всей файловой системе по старинке больше не работает.

В Android 13 (API 33) модель уточнили ещё раз: вместо единого разрешения на хранилище появились гранулярные медиаразрешения — READ_MEDIA_IMAGES, READ_MEDIA_VIDEO и READ_MEDIA_AUDIO. Приложение запрашивает доступ только к тому типу контента, который ему действительно нужен.

Основные разрешения и их назначение

Разберём ключевые разрешения, которые встречаются в манифесте приложений и в настройках системы. Понимание различий поможет и пользователям, и разработчикам.

РазрешениеЧто даётУровень доступа
READ_EXTERNAL_STORAGEЧтение общего хранилища (актуально до Android 12)Обычное, запрашивается у пользователя
WRITE_EXTERNAL_STORAGEЗапись в общее хранилище (устарело с Android 11)Обычное, игнорируется на новых версиях
READ_MEDIA_IMAGES / VIDEO / AUDIOЧтение фото, видео или аудио (Android 13+)Обычное, запрашивается у пользователя
MANAGE_EXTERNAL_STORAGEПолный доступ ко всем файламОсобый, выдаётся вручную в настройках

Отдельного внимания заслуживает MANAGE_EXTERNAL_STORAGE — разрешение «Доступ ко всем файлам». Его получают файловые менеджеры, антивирусы и утилиты резервного копирования. Google Play допускает публикацию приложений с этим разрешением только при обоснованной необходимости.

⚠️ Внимание: выдавайте «Доступ ко всем файлам» только проверенным приложениям. Программа с таким разрешением может читать, изменять и удалять любые данные в общем хранилище, включая документы и личные фото.

Как выдать разрешение на хранилище вручную

Если приложение не запросило доступ автоматически или вы случайно нажали «Запретить», разрешение можно выдать через настройки. Точные названия пунктов меню зависят от оболочки — Samsung One UI, MIUI, ColorOS и «чистый» Android располагают их немного по-разному, но общая логика одинакова.

Типовой путь выглядит так: откройте Настройки → Приложения, выберите нужную программу, перейдите в раздел Разрешения и активируйте пункт Файлы и мультимедиа (или Хранилище). Для полного доступа на некоторых версиях нужен отдельный экран: Настройки → Приложения → Специальный доступ → Доступ ко всем файлам.

☑️ Проверка доступа к хранилищу

Выполнено: 0 / 5
📊 Как вы обычно решаете проблему доступа к файлам?
Выдаю разрешение в настройках
Использую системный выбор файлов
Ставлю файловый менеджер с полным доступом
Не сталкивался с такой проблемой

Scoped storage: что изменилось для приложений

Концепция scoped storage разделила хранилище на изолированные зоны. Каждое приложение получает приватную директорию /Android/data/имя_пакета/, куда может писать без всяких разрешений. При удалении приложения эта папка стирается вместе с данными.

Для работы с общими файлами система предлагает несколько легальных механизмов:

  • 📂 MediaStore API — доступ к фото, видео и аудио через системную медиатеку с соответствующими разрешениями;
  • 📄 Storage Access Framework (SAF) — системный диалог выбора файла или папки, после которого приложение получает доступ к выбранному элементу;
  • 🗂️ Доступ к каталогу — пользователь может выдать приложению права на конкретную папку, например Documents;
  • 🔓 MANAGE_EXTERNAL_STORAGE — полный доступ для особых категорий приложений.

Как следствие, приложение, собранное под старые версии Android, на новых устройствах может «не видеть» файлы, даже если разрешение выдано. Это не сбой, а результат работы ограниченного хранилища: программа обращается к путям напрямую, а система такие обращения фильтрует.

Разрешения на хранилище для разработчиков

Разработчикам необходимо указывать разрешения в файле AndroidManifest.xml и запрашивать их во время выполнения. Пример запроса медиаразрешений для Android 13 и новее:

if (Build.VERSION.SDK_INT >= 33) {

requestPermissions(arrayOf(

Manifest.permission.READ_MEDIA_IMAGES,

Manifest.permission.READ_MEDIA_VIDEO

), REQUEST_CODE)

} else {

requestPermissions(arrayOf(

Manifest.permission.READ_EXTERNAL_STORAGE

), REQUEST_CODE)

}

Обратите внимание: разрешение WRITE_EXTERNAL_STORAGE не оказывает эффекта на устройствах с Android 11 и выше — запись в общие каталоги выполняется через MediaStore или SAF. Также при таргетинге на API 30+ нельзя отключить scoped storage флагом requestLegacyExternalStorage — этот механизм работал только как временная мера перехода.

⚠️ Внимание: запрос MANAGE_EXTERNAL_STORAGE без реальной необходимости — частая причина отклонения приложения при модерации в Google Play. Используйте его только если основной функционал программы невозможен без полного доступа к файлам.
Что такое requestLegacyExternalStorage

Это атрибут манифеста, который временно отключал scoped storage для приложений, собранных под Android 10. Начиная с Android 11 флаг игнорируется для приложений с targetSdkVersion 30 и выше, поэтому рассчитывать на него в современных проектах нельзя.

Почему приложение не видит файлы: диагностика

Когда программа показывает пустой список файлов или ошибку доступа, причина не всегда очевидна. Пройдитесь по типовым сценариям, прежде чем переустанавливать приложение.

  • 🔍 Проверьте, не запрещён ли доступ в разделе Настройки → Приложения → Разрешения — возможно, вы однажды нажали «Запретить и не спрашивать»;
  • 🔄 Уточните, обновлялся ли Android: после крупного обновления модель разрешений могла измениться, и старое разрешение перестало действовать;
  • 🗃️ Убедитесь, что файлы лежат в общедоступной папке, а не в приватном каталоге другого приложения внутри Android/data;
  • 💾 Если речь о SD-карте, проверьте, что она смонтирована и отображается в настройках хранилища.

На некоторых прошивках дополнительно встречаются фирменные ограничения — например, агрессивные оптимизаторы фоновой активности могут сбрасывать выданные разрешения. Если разрешение «само» отключается, проверьте настройки контроля активности конкретного приложения в вашей оболочке.

⚠️ Внимание: начиная с Android 11 система ограничивает прямой доступ к содержимому папок Android/data и Android/obb. Даже файловые менеджеры с полным доступом могут показывать эти каталоги в ограниченном режиме — это штатное поведение, а не поломка.

Часто задаваемые вопросы

Чем READ_EXTERNAL_STORAGE отличается от MANAGE_EXTERNAL_STORAGE?

Первое разрешение даёт чтение общих медиафайлов и запрашивается в обычном диалоге. Второе — полный доступ ко всему хранилищу, включая документы и произвольные папки; оно выдаётся вручную через специальный экран настроек и предназначено для файловых менеджеров и подобных утилит.

Почему в Android 13 нет пункта «Хранилище» в разрешениях?

Начиная с Android 13 единое разрешение заменено на отдельные: «Фото и видео» и «Музыка и аудио». Приложение запрашивает доступ только к нужному типу контента, а для остальных файлов используется системный выбор документов.

Можно ли вернуть старое поведение без scoped storage?

Нет, на современных версиях Android отключить ограниченное хранилище штатными средствами нельзя. Приложениям следует адаптироваться под MediaStore и Storage Access Framework, а пользователям — выбирать программы, обновлённые под текущие требования системы.

Безопасно ли давать приложению «Доступ ко всем файлам»?

Это зависит от доверия к разработчику. Такое разрешение позволяет читать и изменять любые данные в общем хранилище. Выдавайте его только известным файловым менеджерам, архиваторам и утилитам резервного копирования из официальных источников.

Приложение запрашивает разрешение, которого нет в настройках. Что делать?

Возможно, приложение собрано под старую версию Android и запрашивает устаревшее разрешение, которое система новой версии обрабатывает автоматически. Проверьте наличие обновления программы в магазине приложений — актуальные версии используют современную модель разрешений.