Почему в Android 12–14 пропало разрешение на хранилище и как выдать доступ

Коротко: классического «Доступ к хранилищу» в Android 12–14 больше нет — вместо него используются конкретные группы разрешений (Фото и видео, Музыка и аудио, Файлы/контент), системный выбор файлов через SAF, а для редких задач — MANAGE_EXTERNAL_STORAGE с оговорками. Далее — что именно включать и как действовать.

Оглавление {{TOC_AUTOMATIC}}

Коротко о том, как поменялась модель доступа к файлам

Android перешёл на Scoped Storage: приложение получает полный доступ только к своей «песочнице» и ограниченный доступ к общим данным через MediaStore или выбор пользователя (SAF). Основные последствия для пользователя и разработчика:

  • Нет единого разрешения «Storage» — есть узкие группы (Фото и видео, Музыка, Файлы/контент).
  • Приложение не может произвольно читать любые файлы без явного выбора пользователя.
  • Для работы с документами рекомендуется использовать системный диалог выбора файлов (SAF).

Если в настройках приложения нет строки «Память/Хранилище», это нормально — заменено на более понятные группы разрешений.

Как пользователю выдать доступ к файлам (практическая инструкция)

  1. Откройте Настройки → Приложения → выберите приложение → Разрешения.
  2. Включите нужную группу:
    • Фото и видео — для галерей, редакторов, мессенджеров.
    • Музыка и аудио — для плееров.
    • Файлы и контент / Документы — для доступа к файлам (иногда реализуется через диалог).
  3. Если приложение работает с конкретными документами: в нём нажмите «Открыть файл» или «Импорт» — появится системный проводник; выберите файл или папку.
  4. Если предлагается «Разрешить только при использовании» — это безопасный режим; для постоянного доступа иногда нужно выбрать «Разрешить всегда».

Если приложение не видит ваши фото — сначала проверьте «Фото и видео». Разрешение на камеру не равно доступу к сохранённым медиа.

Если приложение требует «доступ ко всем файлам», но ваш интерфейс не показывает такое разрешение — возможно, приложение не обновлено под новые Android. В этом случае ищите обновления или альтернативу.

Что делать, если приложение не видит документы (PDF, ZIP, DOCX)

  • Используйте кнопку «Открыть файл» в приложении: выбор через SAF даёт приложению доступ к конкретному файлу или папке.
  • Если приложение просит доступ к папке: в диалоге выберите каталог и подтвердите доступ; система может сохранить право доступа долговременно.
  • Для файловых менеджеров: при необходимости может требоваться MANAGE_EXTERNAL_STORAGE (см. ниже), но это редкий случай.

Для разработчика: что нужно изменить в приложении

  1. Перейдите на MediaStore и новые разрешения:
    • READ_MEDIA_IMAGES / READ_MEDIA_VIDEO / READ_MEDIA_AUDIO (Android 13+), плюс совместимость с READ_EXTERNAL_STORAGE где нужно.
  2. Для документов и произвольных файлов — используйте SAF:
    • ACTION_OPEN_DOCUMENT, ACTION_OPEN_DOCUMENT_TREE, ACTION_CREATE_DOCUMENT.
    • Для долгосрочного доступа — takePersistableUriPermission.
  3. MANAGE_EXTERNAL_STORAGE (all files access):
    • Только для явных сценариев (файловые менеджеры, бэкапы, антивирусы).
    • Требует обоснования и может быть отклонено при модерации в магазине.
    • Интерфейс покажет пользователю «Разрешить управление всеми файлами» — это уменьшает доверие, используйте с осторожностью.
  4. Обработка версий:
    • Реализуйте ветвление по API: старые модели разрешений для Android <10, Scoped Storage/MediaStore/SAF для Android 10+.
  5. UX и пояснения:
    • Ясно объясняйте пользователю, зачем нужно разрешение и какие данные вы используете — это повышает конверсию запроса разрешения.

Для приложений, работающих с документами, полностью переводите IO на SAF — это уменьшит количество ошибок и упростит совместимость с новыми версиями Android.

Частые ошибки при миграции и как их исправить

  • Ожидание, что WRITE_EXTERNAL_STORAGE даст полный доступ — неверно для Android 12–14.
  • Работа с жёстко захардкоженными путями (/sdcard/...).
  • Игнорирование SAF и MediaStore.
  • Отсутствие fallback‑логики для разных API‑уровней.
  • Неполные объяснения в UI — пользователь откажет в доступе.

Решение: аудит кода на предмет прямых операций с внешними путями, внедрение SAF/MediaStore, тестирование на реальных устройствах с Android 12–14.

FAQ

  • Нужно ли включать MANAGE_EXTERNAL_STORAGE для всех файловых менеджеров?
    Только если функциональность реально требует доступа ко всем файлам; иначе используйте SAF и MediaStore.

  • Как временно дать доступ к фото?
    Дайте разрешение «Фото и видео» или используйте диалог выбора файла — он даёт доступ к выбранным объектам.

  • Что делать, если приложение пишет, что «нужен доступ к хранилищу», но система не показывает такое разрешение?
    Проверьте обновления приложения; если нет — свяжитесь с разработчиком или используйте альтернативу.


Если нужно — могу переписать статью под аудиторию: пошаговая инструкция с скриншотами для пользователей или техническое руководство с примерами кода и checklist для разработчиков.