Android ERR_STORAGEСредняя

Исправляем ошибку доступа к внешнему хранилищу Android

Ошибка доступа к внешнему хранилищу на Android мешает сохранять файлы. В статье разбор причин и 4 способа решения.

Обновлено 3 сентября 2026 г.
10-15 min
Средняя
FixPedia Team
Применимо к:Android 10Android 11Android 12Android 13

Что означает ошибка ERR_STORAGE

При попытке сохранить файл во внешнее хранилище (фото, документ, архив) приложение может выдавать системное уведомление «Не удалось записать в память» или молча отказываться сохранять данные. С появлением Android 10 введено Scoped Storage — политика, жестко ограничивающая прямой доступ приложений к файлам на SD-карте и в папках Download/Documents. Ошибка ERR_STORAGE означает, что ваше приложение пытается записать файл в путь, к которому у него нет текущих прав, или использует устаревший метод сохранения, который блокируется системой. Типичная ситуация: экспорт данных, сохранение прикрепленного файла или загрузка медиа в галерее.

Причины возникновения

  • В Android 10 и новее включен Scoped Storage, который блокирует прямое сохранение файлов в корневые папки внешнего хранилища без соответствующих разрешений или исключений.
  • Отсутствие или ошибочная обработка разрешения WRITE_EXTERNAL_STORAGE на устройствах с Android 6.0–9, где это разрешение больше не гарантирует доступ ко всем папкам.
  • В манифесте приложения задан старый targetSdkVersion (ниже 29), который не учитывает новые политики хранилища, либо он отсутствует altogether.
  • Повреждение или очистка базы данных MediaStore, из-за которой система теряет связь с previously сохраненными файлами, и новые записи не отображаются или не сохраняются.
  • Оболочки производителя (MIUI, One UI, ColorOS) могут иметь свои собственные менеджеры памяти, которые перехватывают запросы на запись и требуют дополнительных настроек.

Способы решения

Способ 1: Проверка и включение разрешения на запись

Зайдите в НастройкиПриложения → выберите проблемное приложение → перейдите в раздел Разрешения. Найдите пункт Доступ к внешнему хранилищу (или «Файлы и медиа») и убедитесь, что он включен. На некоторых скинах этот пункт называется «Доступ к памяти» или находится под «Дополнительными настройками». Если пункта нет, обновите систему до последней версии или проверьте настройки оболочки производителя.

Способ 2: Настройка исключения через настройки системы

Некоторые устройства предлагают ручное добавление приложения в белый список разрешенных для записи. Зайдите в НастройкиДополнительноНастройки хранилищаИсключения (или «Управление доступом к файлам») и добавьте нужное приложение в список. Это позволит обойти некоторые ограничения Scoped Storage для конкретного хранилища.

Способ 3: Обновление манифеста и включение Legacy Storage

Если вашему приложению действительно нужен прямой доступ к файлам (например, файловый менеджер), обновите targetSdkVersion до 28 или ниже и добавьте в AndroidManifest.xml атрибут: android:requestLegacyExternalStorage="true" Обратите внимание: этот способ работает только для Android 9 и ниже. Для Android 10+ требуется переход на официальные API.

Способ 4: Использование MediaStore API для сохранения

Современный и рекомендуемый способ — сохранять файлы через MediaStore. Это гарантирует, что файлы будут видны в галерее, файловом менеджере и корректно управляться системой. Пример на Kotlin для сохранения изображения в папку «Downloads»:

// Создаем ContentValues с путем к папке Downloads
val contentValues = ContentValues().apply {
    put(MediaStore.Downloads.RELATIVE_PATH, 
        Environment.DIRECTORY_DOWNLOADS + "/MyApp")
}
// Запрашиваем у системы URI для сохранения файла
val contentResolver = applicationContext.contentResolver
val uri = contentResolver.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, contentValues)
// Открываем поток для записи
uri?.also { savedUri ->
    outputStream = contentResolver.openOutputStream(savedUri)
}

Не забудьте добавить необходимые разрешения в манифест: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> (для Android 9 и ниже) или полагайтесь на Runtime permissions для MediaStore на newer версиях.

Способ 5: Очистка базы MediaStore через ADB

Если файлы сохраняются, но не появляются в интерфейсе или выдается ошибка доступа, попробуйте пересоздать индекс хранилища. Подключите устройство к компьютеру, откройте терминал и выполните: adb shell content insert --uri media://external После этой команды перезагрузите телефон. Это очистит кэш системного провайдера медиа и часто решает проблемы с отображением и записью файлов.

Профилактика

Чтобы избежать повторения проблемы, соблюдайте следующие рекомендации:

  • Всегда используйте MediaStore или DocumentProvider для сохранения файлов вместо прямого пути к памяти.
  • Поддерживайте targetSdkVersion актуальным — с каждым релизом Android политики хранилища уточняются, и старые работы могут сломаться.
  • Тестируйте сохранение файлов на чистом профиле пользователя и на разных версиях Android (10–13), чтобы выявить зависимости от оболочки производителя.

💡 Совет: Если после обновления Android проблема вернулась, проверьте targetSdkVersion в манифесте и обновите вызовы сохранения на использование MediaStore.

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

Почему приложение не может сохранить файл на внешнем хранилище?
Можно ли отключить Scoped Storage для своего приложения?
Как дать приложению права на запись в SD-карту?
Что делать, если ошибка сохраняется после предоставления прав?

Полезное

Проверка разрешения на запись
Настройка исключения в системных настройках
Обновление манифеста приложения
Использование MediaStore API для сохранения
Очистка базы MediaStore через ADB

Эта статья помогла вам решить проблему?