Как считать файлы без permission на доступ к файловой системе

«Как считать файлы без permission на доступ к файловой системе» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Начиная с Android 10 (API 29), доступ к файловой системе ограничен. Однако есть способы работать с файлами без READ_EXTERNAL_STORAGE:

  1. Использование Storage Access Framework (SAF)
    Пользователь сам выбирает файлы через системный файловый пикер:
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
    addCategory(Intent.CATEGORY_OPENABLE)
    type = "*/*" // или конкретный MIME-тип
}
startActivityForResult(intent, REQUEST_CODE)
  1. Файлы внутри sandbox приложения
    Доступ к getFilesDir(), getCacheDir() и MediaStore (для изображений/видео) без пермишенов.

  2. Scoped Storage (Android 10+)
    Через MediaStore можно читать медиафайлы без пермишенов, если они созданы вашим приложением.

Для Android 11+ также доступны специальные пермишены типа MANAGE_EXTERNAL_STORAGE, но их использование требует обоснования в Google Play.