如何解决测试 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 举报,一经查实,本站将立刻删除。