Ограниченное хранилище не применяется в приложении, ориентированном на Android 11

Я тестирую свое приложение на устройстве под управлением Android 9. Теперь приложение предназначено для Android 11 в соответствии с моим файлом Gradle:

android {

compileSdkVersion 30
buildToolsVersion '30.0.3'

defaultConfig {
    applicationId "com.xxx.yyy.zzz"
    minSdkVersion 15
    targetSdkVersion 30
    versionCode 15455
    versionName "4.55"
    multiDexEnabled true

}

Перед запуском приложения я удалил предыдущую версию с тестового устройства.

Когда приложение, ориентированное на Android 11, запускается со следующим кодом:

   try {
        File oldDir = new File(Environment.getExternalStorageDirectory(), "MyFolder");
        File afile = new File(oldDir, "myFile.boo");
        afile.createNewFile();
    }
    catch(IOException e){}

Приложение создает MyFolder / myFile.boo, который доступен и может быть удален.

В документации разработчика четко указано: https://developer.android.com/about/versions/11/privacy

Приложения, предназначенные для Android 11 или более поздней версии, всегда подчиняются ограниченному хранилищу. В документации не упоминаются какие-либо исключения для конкретной сборки Android телефона.

Почему я могу создать этот файл и получить к нему доступ в соответствии с новыми ограничениями хранилища с ограниченной областью, если мое приложение заявило, что оно будет использовать хранилище с ограниченной областью?


person user1608385    schedule 20.12.2020    source источник
comment
The app creates MyFolder/myFile.boo Он сам createNewFile (); не будет создавать папки.   -  person blackapps    schedule 20.12.2020
comment
MyFolder был создан приложением ранее. Тем не менее, я могу создать новую папку в Environment.getExternalStorageDirectory () следующим образом: File aFile = new File (Environment.getExternalStorageDirectory (), your_file_name); aFile.mkDirs (). Папка your_file_name теперь создана и видна другим приложениям на устройстве под управлением Android 9, где приложение предназначено для Android 11.   -  person user1608385    schedule 20.12.2020
comment
Конечно, на устройстве Android 9. Ваш min SdkVersion равен 15. Остальное, 30, не имеет значения. Я думал, вы видели это на устройстве Android 11.   -  person blackapps    schedule 20.12.2020
comment
when my app has declared that it will be using scoped storage? Ваше приложение может использовать только возможности устройства. Приложения не могут заявлять, что они используют хранилище с ограниченным доступом. А объемное хранилище - это не дополнительная функция, а ограничение.   -  person blackapps    schedule 20.12.2020
comment
Спасибо. Если вы измените свой ответ так, чтобы он включал что-то вроде и ограниченное хранилище, которое применяется только на устройствах, работающих под управлением Android 11 для приложений, предназначенных для Android 11 или Android 10, без заявленного в приложении requestLegacyExternalStorage = true и согласен с этим, я приму ответ. Обычно, когда есть новые ограничения для версии Android, в документации будет сказано, что запускается на устройстве под управлением Android? и выше .... Отсутствие этого оператора заставило меня зациклиться.   -  person user1608385    schedule 20.12.2020
comment
прочтите этот stackoverflow.com/a/66366102/9917404   -  person Thoriya Prahalad    schedule 25.02.2021


Ответы (1)


Да, но я не верю, что вы можете создавать свои собственные папки в корне внешнего хранилища на устройстве Android 11. Но вы можете во всех обычных общедоступных каталогах на внешнем хранилище. Вы должны использовать mkdir () или mkdirs (), хотя для создания папки.

Android 11 менее строгий, чем рекламируется.

Доступ к внешнему хранилищу в Android API 29

См. Пункт 3. ответа.

person blackapps    schedule 20.12.2020