微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

测试 MANAGE_EXTERNAL_STORAGE 权限

如何解决测试 MANAGE_EXTERNAL_STORAGE 权限

我想为我的文件管理器应用支持 MANAGE_EXTERNAL_STORAGE 权限。我已按照以下步骤执行此操作。我已将以下行添加到清单中

AppRoutes.forEach(x => { valuesFromFunction.forEach(y => { if(x.path == y.path){ x.data = {rol: y.rol} } }); });

并使用以下代码请求对主要活动的许可:

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

我的问题与获取许可无关。这是别的东西。当我不小心将旧 APK 用于支持存储访问的旧版 Android 10 设备时,它实际上在 Android Studio 中使用 Android 11 的 Pixel 4 模拟器上运行。它要求写入权限 (if (Environment.isExternalStorageManager()) { //todo when permission is granted } else { //request for the permission Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); Uri uri = Uri.fromParts("package",getPackageName(),null); intent.setData(uri); startActivity(intent); } ),而我认为该权限在 Android 11 上不再可用。当我进入权限时,我没有看到存储 (WRITE_EXTERNAL_STORAGE) 权限(我看到在 Android 6-10 设备上),我看到了 Android 11 的管理 (WRITE_EXTERNAL_STORAGE) 权限。这是怎么发生的?系统是否将 MANAGE_EXTERNAL_STORAGE 映射到 WRITE_EXTERNAL_STORAGE 权限?

我问的原因是我的用户将他们的手机从 Android 10 升级到 11,他们报告说该应用(仅包含 MANAGE_EXTERNAL_STORAGE)在启动时没有响应。它如何在我的 Pixel 4 Android 11 模拟器上运行?是否有可能真正获得与我的用户相同的行为?我没有真正的 Android 11 设备。

谢谢。

解决方法

here所述,

在 Android 11 上运行但面向 Android 10(API 级别 29)的应用仍然可以请求 requestLegacyExternalStorage 属性。此标志允许应用程序暂时退出与范围存储相关的更改,例如授予对不同目录和不同类型媒体文件的访问权限。在您将应用更新为面向 Android 11 后,系统会忽略 requestLegacyExternalStorage 标志。

由于您的旧 APK 面向 Android 10,因此 Android 操作系统可以使用 requestLegacyExternalStorage 来支持向后兼容性。

Android 这样做是因为所有不针对 Android 11 的应用都将停止协同工作,这对所有用户来说都是一种痛苦。为什么要打扰用户在更新到 Android 11 后他们无法使用他们现有的应用程序。在这种情况下,除非所有开发人员更新他们的应用程序,否则没有人会更新。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。