Ответ
Начиная с Android 10 (API 29), доступ к файловой системе ограничен. Однако есть способы работать с файлами без READ_EXTERNAL_STORAGE:
- Использование Storage Access Framework (SAF)
Пользователь сам выбирает файлы через системный файловый пикер:
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "*/*" // или конкретный MIME-тип
}
startActivityForResult(intent, REQUEST_CODE)
-
Файлы внутри sandbox приложения
Доступ кgetFilesDir(),getCacheDir()иMediaStore(для изображений/видео) без пермишенов. -
Scoped Storage (Android 10+)
ЧерезMediaStoreможно читать медиафайлы без пермишенов, если они созданы вашим приложением.
Для Android 11+ также доступны специальные пермишены типа MANAGE_EXTERNAL_STORAGE, но их использование требует обоснования в Google Play.