在Android 11上,应用程序不再具有无限访问外部存储的权限。因此,如果您想在外部存储上创建并使用特定于应用程序的目录,您需要遵循以下步骤:
...
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
Context context = getApplicationContext();
String folderName = "my_folder";
StorageManager storageManager = context.getSystemService(StorageManager.class);
Intent intent = storageManager.getPrimaryStorageVolume().createOpenDocumentTreeIntent();
startActivityForResult(intent, MY_REQUEST_CODE);
} else {
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), "my_folder");
if (!file.exists()) {
file.mkdirs();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
super.onActivityResult(requestCode, resultCode, resultData);
if (requestCode == MY_REQUEST_CODE && resultCode == RESULT_OK) {
Uri treeUri = resultData.getData();
// Persist access permissions.
final int takeFlags = resultData.getFlags()
& (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
getContentResolver().takePersistableUriPermission(treeUri, takeFlags);
// Use this URI to write to the desired external storage location
}
}
请注意,如果您需要在外部存储上创建文件或目录,则必须在用户授予您访问权限后执行此操作。
上一篇:Android11-WebrtcVOIP呼叫在浏览器或桌面应用程序中无法工作,但在Android10中可以工作。
下一篇:Android11:AndroidProtocolHandler:WebView无法通过FileProvider显示具有本地图像的本地html文件