Android mkdirs() return false on Android 11 with Environment.getExternalStorageDirectory()

Android mkdirs() return false on Android 11 with Environment.getExternalStorageDirectory()

Mkdirs() 函数在 Android 11 上不起作用。在 Android 10 及更低版本上一切正常。

代码:

***String path =Environment.getExternalStorageDirectory().getAbsolutePath() + "/My_directory/";
    File temp_file = new File(path);
    if (!temp_file.exists()){
        Boolean can_create= temp_file.mkdir();
    }***

以上代码 returns 在 Android 10 或更低的情况下为真。但是 returns false 在 Android 11 的情况下。 清单权限:

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

注意到运行时权限被认为是相同的(READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE)。

清单申请:

    <application
    android:requestLegacyExternalStorage="true"

我能够写入外部存储的唯一方法是使用 getExternalFilesDir() 但这不是根目录。

根据这个developer网站,我们不能再在根目录下创建文件夹了!

检查后到目前为止的问题

1- 确认在Android11中我们不能在根目录下创建任何文件夹?有解决办法吗?

2-如果是,除了getExternalFilesDir()之外,将数据保存在外部存储器中的方法是什么?

3- 为什么 android:requestLegacyExternalStorage="true" 不起作用?

Why android:requestLegacyExternalStorage="true" is not working?

android:requestLegacyExternalStorage 不再适用于 Android 11+。它只是 Android 10 上的一个帮手,可以在迁移到分区存储之前为开发人员提供更多时间。在分区存储上,您需要使用 URI 来创建、重命名、移动文件等。因此 java.io.File 现在几乎没用了。

Is it confirmed that in Android 11 we can't create any folder on the root directory? any workaround?

没有解决方法。

顺便说一句,为了降低分区存储的复杂性,我创建了一个名为 Simple Storage 的库。它适用于 API 个级别。

***String path =Environment.getExternalStorageDirectory().getAbsolutePath() + "/My_directory/";

您无法在 Android 11 台设备的外部存储根目录中创建目录。

而是在外部存储的 public 目录之一中创建您自己的目录。

File dir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), "My_directory");