【问题标题】:Scoped Storage Not Enforced On App Targeting Android 11未在面向 Android 11 的应用上实施范围存储
【发布时间】:2021-03-30 15:27:45
【问题描述】:

我正在运行 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 版本的任何例外情况。

当我的应用声明它将使用范围存储时,为什么我能够在新的范围存储限制下创建和访问此文件?

【问题讨论】:

  • The app creates MyFolder/myFile.boo he he createNewFile();不会创建文件夹。
  • MyFolder 之前是由应用程序创建的。尽管如此,我可以在 Environment.getExternalStorageDirectory() 中创建一个新文件夹,如下所示: File aFile = new File(Environment.getExternalStorageDirectory(), "your_file_name"); aFile.mkDirs()。现在,“your_file_name”文件夹已创建并且对运行 Android 9 的设备上的其他应用可见,并且该应用针对的是 android 11。
  • 当然是在 Android 9 设备上。您的最小 SdkVersion 为 15。其余的 30 无关紧要。我以为你是在 Android 11 设备上看到的。
  • when my app has declared that it will be using scoped storage? 你的应用只能跟随设备的可能性。应用程序不能声明它们使用范围存储。范围存储不是额外的功能,而是一种限制。
  • 谢谢。如果您修改您的答案,使其包含类似“并且范围存储仅在运行 Android 11 的设备上适用于针对 android 11 或 Android 10 的应用程序且未在应用程序中声明 requestLegacyExternalStorage="true" 并同意这一点,我会接受答案。通常当安卓版本有新的限制时,文档会说“在运行安卓的设备上运行时?等等……”。这条语句的缺失让我陷入了循环。

标签: android file-access scoped-storage


【解决方案1】:

是的,但我不相信您可以在 Android 11 设备的外部存储根目录中创建自己的文件夹。但是您可以在外部存储上的所有普通公共目录中。您必须使用 mkdir() 或 mkdirs() 创建文件夹。

Android 11 没有宣传的那么严格。

Accessing external storage in Android API 29

参见答案的第 3 点。

【讨论】:

    猜你喜欢
    • 2020-07-07
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    相关资源
    最近更新 更多