但是,如何验证该应用程序目前是否拥有“所有文件访问”权限。我用这种方法请求许可。
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
intent.addCategory("android.intent.category.DEFAULT");
intent.setData(Uri.parse(String.format("package:%s",this.getPackageName())));
startActivityForResult(intent, 2296);
请帮我解决这个问题:
发布于 2022-06-29 08:31:50
在manifest.xml
中声明此权限
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
问MANAGE_EXTERNAL_STORAGE
try {
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
intent.setData(Uri.parse(String.format("package:%s", getApplicationContext().getPackageName())));
startActivityForResult(intent, 2296);
} catch (Exception e) {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
startActivityForResult(intent, 2296);
}
在onActivityResult
中获得结果
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 2296) {
if (SDK_INT >= Build.VERSION_CODES.R) {
if (Environment.isExternalStorageManager()) {
// perform action when allow permission success
} else {
Toast.makeText(this, "Allow permission for storage access!", Toast.LENGTH_SHORT).show();
}
}
}
}
因此,基本上您可以检查权限是否在Android11中授予,就像这样;
if (SDK_INT >= Build.VERSION_CODES.R) {
if (Environment.isExternalStorageManager()) {
// Permission Granted
}
}
发布于 2022-06-29 06:03:13
在内部内存根目录中创建新的虚拟0字节文件,然后删除它.如果这两个操作都成功,那么您可以访问。当您无法访问时,您的代码将throw Exception
(在创建文件步骤上),您可以try{ }catch(Exception e)
(防止应用程序崩溃)。
内部/外部/共享的路径可以从Environment
类获得,我首先尝试getExternalStorageDirectory
https://stackoverflow.com/questions/72795652
复制相似问题