问题描述
我正在运行 Android 9 的设备上测试我的应用。根据我的 Gradle 文件,该应用现在面向 Android 11:
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 版本的任何例外。
当我的应用声明将使用范围存储时,为什么我能够在新的范围存储限制下创建和访问此文件?
解决方法
是的,但我不相信您可以在 Android 11 设备上的外部存储根目录中创建自己的文件夹。但是您可以在外部存储上的所有普通公共目录中。您必须使用 mkdir() 或 mkdirs() 来创建文件夹。
Android 11 不像宣传的那样严格。
Accessing external storage in Android API 29
请参阅答案的第 3 点。