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

Posted

技术标签:

【中文标题】如何将存储权限与外部存储管理员权限捆绑在一起【英文标题】:How to bundle storage permission with external storage manager permission 【发布时间】:2021-08-20 03:32:42 【问题描述】:

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

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

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

/* 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 系统流程来引导用户一起完成这两个权限?拥有两个不同的流程似乎需要由应用程序拥有大量的冗余逻辑。我找不到类似的东西,所以在这里问我是否遗漏了什么。

【问题讨论】:

【参考方案1】:

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

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

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

不,抱歉。

请注意,我没有尝试在没有WRITE_EXTERNAL_STORAGE 的情况下持有MANAGE_EXTERNAL_STORAGE。如果您持有MANAGE_EXTERNAL_STORAGE,则可能不需要WRITE_EXTERNAL_STORAGE。 The documentation 建议可能是这种情况。

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

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

【讨论】:

如果我只要求 MANAGE_EXTERNAL_STORAGE,我没有得到任何许可。在应用信息中,我在权限部分看到了No Permission Requested。我们对此进行了彻底的分析,似乎我们需要这两个权限。 @ABS:“在应用信息中,我在权限部分看到没有请求权限”——我希望如此。如果您实际上可以写入文件,我会更感兴趣。如果除非您同时拥有这两个权限,否则不支持该功能,那么我链接到了一个通常令人困惑的 Android 开发人员文档。 哦,说得好,我会测试一下。谢谢!

以上是关于如何将存储权限与外部存储管理员权限捆绑在一起的主要内容,如果未能解决你的问题,请参考以下文章

如何获得读取外部存储权限?

泛圈企业云盘权限管理的安全存储

网络云存储技术Windows server 2012 (项目十 基于NTFS权限(ADLP原则)的文件共享服务的配置与管理)

外部存储、WRITE_EXTERNAL_STORAGE权限与maxSdkVersion属性的使用

Google Cloud FUSE 与 Cloud Run [Errno 5] 输入/输出错误:'/database' 但已授予存储对象管理员访问权限

android系统怎么设置内部存储的访问权限