如何默认选择Android允许管理所有文件选项?

问题描述

我正在使用以下代码集访问文件。但是对于 Android 11,它只有在从应用程序信息屏幕手动启用“允许管理所有文件”后才能工作。

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            
            path = FileProvider.getUriForFile(getApplicationContext(),getApplicationContext().getPackageName() + ".helper.ProviderClass",contentUri);
            intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
            intent.setAction(Intent.ACTION_VIEW);
            intent.setDataAndType(path,"application/pdf");
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
            intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            startActivity(intent);
        } else {
            path = Uri.fromFile(contentUri);
            intent = new Intent(Intent.ACTION_VIEW);
            intent.setDataAndType(path,"application/pdf");
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
            intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            startActivity(intent);
        }

任何人,请提出更好的解决方案来自动启用该选项。

解决方法

您当前在 if else 中的代码实际上是相同的(除了文件 URI)... new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION) 为此 Intent 设置操作,但您在下面的一行覆盖了此值与 setAction 通话

考虑在 Android 11 上检测您的权限状态,如果未授予则使用

startActivity(new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION));

这会将用户传递到正确的设置屏幕,其中必须由用户手动授予权限,这是当前的系统策略。然后在返回应用程序后再次检查权限,如果现在被授予(用户启用)然后运行您的视图文件意图

HERE 中的一些相关文档

,

阅读下面给出的 Android 链接的文档 Storage updates in Android 11