如何将存储权限与外部存储管理器权限捆绑在一起

问题描述

我正在开发一个文件应用程序,在面向 API-30 之后,我不仅需要媒体存储权限 (WRITE_EXTERNAL_STORAGE),还需要成为外部存储管理员 (MANAGE_EXTERNAL_STORAGE )。为此,我必须向客户显示 2 个不同的系统对话框。第一个是媒体商店权限对话框:

Storage Permission Dialog

/* Code to show this permission */
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.MANAGE_EXTERNAL_STORAGE},1);

然后我必须显示以下内容才能获得外部存储管理器权限:

enter image description here

/* Code to show this permission */
final Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
final Uri uri = Uri.fromParts("package",activity.getApplicationContext().getPackageName(),null);
intent.setData(uri);
activity.startActivity(intent);

android 系统中是否有一些东西可以向用户显示一个将所有存储权限捆绑在一起的对话框,或者任何可以启动的 android 系统流程来引导用户一起完成这两个权限?拥有两个不同的流程似乎是需要由应用程序拥有的大量冗余逻辑。我找不到类似的东西,所以在这里问我是否遗漏了什么。

解决方法

android 系统中是否有一些东西可以向用户显示一个将所有存储权限捆绑在一起的对话框

不是就 MANAGE_EXTERNAL_STORAGE 而言,因为这不是您通过 requestPermissions() 处理的运行时权限。 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE 可以使用 requestPermissions() 一起请求。

或者任何可以启动的 android 系统流程来引导用户一起完成这两种权限?

不,抱歉。

请注意,我没有尝试在没有 MANAGE_EXTERNAL_STORAGE 的情况下持有 WRITE_EXTERNAL_STORAGE。如果您持有 WRITE_EXTERNAL_STORAGE,也许不需要 MANAGE_EXTERNAL_STORAGEThe documentation 表明可能是这种情况。

拥有两个不同的流程似乎是需要由应用拥有的大量冗余逻辑

很少有应用会要求用户授予 MANAGE_EXTERNAL_STORAGE。显然,Google 真的希望用户考虑是否应该向您的应用授予该权限。