如何检查是否授予了Manifest.permission.MANAGE_EXTERNAL_STORAGE权限?

4
如何检查是否已授予Manifest.permission.MANAGE_EXTERNAL_STORAGE权限?我尝试了以下方法,但不起作用:
ContextCompat.checkSelfPermission(context, 
  "Manifest.permission.MANAGE_EXTERNAL_STORAGE")
  == PackageManager.PERMISSION_GRANTED

上述代码始终返回false,尽管已经授予权限。非常感谢任何帮助!
3个回答


1

正如CommonsWare所说,您可以使用isExternalStorageManager()

返回调用应用程序是否具有主共享/外部存储介质上的所有文件访问权限。声明Manifest.permission.MANAGE_EXTERNAL_STORAGE权限不足以获得访问权限。要请求访问权限,请使用android.provider.Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION

示例

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
        if(!Environment.isExternalStorageManager())
        {
              try {
                    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", getApplicationContext().getPackageName())));
                    storagePermissionRequest.launch(intent);
                } catch (Exception e) {
                    Intent intent = new Intent();
                    intent.setAction(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
                    storagePermissionRequest.launch(intent);
                }
        }
    }

结果合同。ActivityResultContracts

ActivityResultLauncher<Intent> storagePermissionRequest = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            new ActivityResultCallback<ActivityResult>() {
                @Override
                public void onActivityResult(ActivityResult result) {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
                        if (!Environment.isExternalStorageManager()) {
                            showPermissionDeniedDialog();
                        }
                    }
                }
            });

我希望这对其他人有所帮助。

11之前的API呢? - moumenShobakey
@moumenShobakey 你可以使用 requestLegacyExternalStorage 和普通权限。 - Ashvin solanki
我正在使用它们,但我仍然无法访问下载目录。 - moumenShobakey

0
if (ContextCompat.checkSelfPermission(
                requireContext(),  
                Manifest.permission. MANAGE_EXTERNAL_STORAGE //Android 10, WRITE_EXTERNAL_STORAGE for older
            ) != PackageManager.PERMISSION_GRANTED
        ) {
            requestPermissions(
                arrayOf(Manifest.permission. MANAGE_EXTERNAL_STORAGE),
                REQUEST_CODE. // you can use it then in onActivityResult() etc.
            )
        } else {
             doSomething() //now you have permission
        }

谢谢回复,不幸的是checkSelfPermission方法不起作用。现在CommonsWare回答了我的问题。无论如何,谢谢! - avelyne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接