Что означает ошибка 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.