在Android 11中,应用程序的权限控制变得更加严格,应用程序需要显式请求从设备上的私有目录访问文件的权限。在此之前,我们可以通过获取应用程序的存储权限来创建应用程序目录并放置我们的文件。在Android 11中,这种方法不再奏效。
为了在Android 11中正确地向应用程序目录创建文件夹,我们需要使用新的API:Context.getFilesDir()和Context.getNoBackupFilesDir()方法,以及Context.getExternalFilesDir()方法。
例如,这段代码创建了一个名为“myFolder”的文件夹,它在Android 11及更高版本中位于应用程序目录下:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
Context context = getApplicationContext();
String folderName = "myFolder";
File file = new File(context.getFilesDir(), folderName);
if (!file.exists()) {
file.mkdir();
}
}
Context.getExternalFilesDir()方法类似于之前的存储API,但需要从应用程序的私有目录中请求文件访问权限。因此,这种方法在Android 11中仍然无法创建应用程序目录。
请注意,上面的示例在Android 11及更高版本中使用新API,而在其他版本中仍使用旧的存储API。这是因为新API仅适用于Android 11及更高版本。
在处理文件时,请始终检查设备的Android版本并相应地处理文件路径。