【发布时间】:2021-06-18 21:40:45
【问题描述】:
我想为我的文件管理器应用程序支持 MANAGE_EXTERNAL_STORAGE 权限。我已按照以下步骤执行此操作。我在清单中添加了以下行
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
并使用以下代码请求主要活动的权限:
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);
}
我的问题不在于获得许可。这是另外一回事。当我不小心将我的旧 APK 用于支持存储访问的旧版 Android 10 设备时,它实际上可以在 Android Studio 中的 Android 11 的 Pixel 4 模拟器上运行。它要求写入权限 (WRITE_EXTERNAL_STORAGE),而我认为该权限在 Android 11 上不再可用。当我进入权限时,我没有看到存储 (WRITE_EXTERNAL_STORAGE) 权限(我在 Android 6 上看到- 10 台设备),我看到了 Android 11 的管理 (MANAGE_EXTERNAL_STORAGE) 权限。这是怎么回事?系统是否将WRITE_EXTERNAL_STORAGE 映射到MANAGE_EXTERNAL_STORAGE 权限?
我问的原因是我的用户将他们的手机从 Android 10 升级到 11,他们报告说该应用程序(仅包含 WRITE_EXTERNAL_STORAGE)在启动时没有响应。它如何在我的带有 Pixel 4 Android 11 的模拟器上运行?是否有可能真正获得我的用户获得的相同行为?我没有真正的 Android 11 设备。
谢谢。
【问题讨论】:
-
我认为是因为android的向后兼容性
-
也可能是因为您的旧 apk 在清单中将
requestLegacyExternalStorage设置为 true -
非常感谢您的回复,Ishaan Kumar。不过,根据文档,这在 Android 11 中已被弃用。
-
是的,它在 Android 11 中已弃用,但仍可用于支持向后兼容性
标签: android storage scoped-storage