在Android 11中,应用程序的私有数据目录受到更严格的限制。默认情况下,应用程序无法访问其他应用程序的私有存储空间,也无法向公共存储空间写入文件。
要允许您的应用程序访问其他应用程序的私有存储空间,您可以在AndroidManifest.xml文件中添加以下行:
...
上述代码将启用传统的外部存储访问模式,并允许您的应用程序访问Android/data目录。但是,这种方法不太理想,因为Android 11将来可能会完全删除这种访问模式。
更好的方法是使用Storage Access Framework(SAF)来访问Android/data目录。以下是使用SAF的示例代码:
private static final int REQUEST_CODE = 101;
public void openDirectoryPicker(View view) {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, REQUEST_CODE);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
super.onActivityResult(requestCode, resultCode, resultData);
if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK) {
if (resultData != null) {
Uri uri = resultData.getData();
DocumentFile documentFile = DocumentFile.fromTreeUri(this, uri);
DocumentFile dataDir = documentFile.findFile("Android/data/com.example.app/");
if (dataDir != null && dataDir.isDirectory()) {
// Access Android/data/com.example.app/ directory here
}
}
}
}
在此示例中,我们首先使用ACTION_OPEN_DOCUMENT_TREE
意图打开了一个目录选择器。一旦用户选择了目录,我们将通过返回的结果Uri
创建一个DocumentFile
对象。接下来,我们可以使用findFile
方法找到名为“com.example.app”的