Почему не требуется WRITE_EXTERNAL_STORAGE на Android Q и выше

Я использую DownloadManager, чтобы загрузить фотографию и сохранить ее во внешнем каталоге изображений:

.setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES, File.separator + filename)

Marshmallow требует WRITE_EXTERNAL_STORAGE (как и ожидалось), но на Android Q и выше он отлично работает без разрешения. Почему это так? Это из-за ограниченного хранилища?




Ответы (1)


Документ для Android:

Android определяет следующие разрешения для доступа для чтения и записи к внешнему хранилищу: READ_EXTERNAL_STORAGE и WRITE_EXTERNAL_STORAGE.

В более ранних версиях Android приложениям необходимо было объявить эти разрешения для доступа к любому файлу за пределами директорий приложения во внешнем хранилище. Более поздние версии Android больше зависят от назначения файла, чем от его местоположения, для определения возможности приложения получить доступ к этому файлу. Эта модель целевого хранилища улучшает конфиденциальность пользователей, поскольку приложениям предоставляется доступ только к тем областям файловой системы устройства, которые они фактически используют.

Чтобы предоставить пользователям больший контроль над своими файлами и ограничить беспорядок в файлах, приложениям, ориентированным на Android 10 (уровень API 29) и выше, по умолчанию предоставляется ограниченный доступ к внешнему хранилищу или хранилище с ограниченным объемом. Такие приложения имеют доступ только к каталогу для конкретного приложения на внешнем хранилище, а также к определенным типам мультимедиа, созданным приложением.

Подробнее…

person Kasım Özdemir    schedule 20.03.2020