首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何知道该应用程序目前是否拥有“所有文件访问”权限。Android 11

如何知道该应用程序目前是否拥有“所有文件访问”权限。Android 11
EN

Stack Overflow用户
提问于 2022-06-29 03:59:12
回答 2查看 192关注 0票数 1

但是,如何验证该应用程序目前是否拥有“所有文件访问”权限。我用这种方法请求许可。

代码语言:javascript
运行
复制
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);

请帮我解决这个问题:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-29 08:31:50

manifest.xml中声明此权限

代码语言:javascript
运行
复制
   <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

MANAGE_EXTERNAL_STORAGE

代码语言:javascript
运行
复制
      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中获得结果

代码语言:javascript
运行
复制
   @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中授予,就像这样;

代码语言:javascript
运行
复制
if (SDK_INT >= Build.VERSION_CODES.R) {
   if (Environment.isExternalStorageManager()) {
      // Permission Granted
   }
}
票数 2
EN

Stack Overflow用户

发布于 2022-06-29 06:03:13

在内部内存根目录中创建新的虚拟0字节文件,然后删除它.如果这两个操作都成功,那么您可以访问。当您无法访问时,您的代码将throw Exception (在创建文件步骤上),您可以try{ }catch(Exception e) (防止应用程序崩溃)。

内部/外部/共享的路径可以从Environment类获得,我首先尝试getExternalStorageDirectory

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72795652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档