uni-app UTSAndroid.requestSystemPermission申请“android.permission.READ_EXTERNAL_STORAGE”时没弹窗,申请其他权限都正常
uni-app UTSAndroid.requestSystemPermission申请“android.permission.READ_EXTERNAL_STORAGE”时没弹窗,申请其他权限都正常
存储权限已被废弃,具体参考谷歌文档:https://developer.android.google.cn/reference/android/Manifest.permission#READ_EXTERNAL_STORAGE
这个指的是API 33以上不能用READ_EXTERNAL_STORAGE,但我本地环境主工程SDK是 compileSdkVersion 31,uts插件模块也是 compileSdkVersion 31,真机安卓10,测试了UTSAndroid.requestSystemPermission申请“android.permission.READ_EXTERNAL_STORAGE”都没弹窗
https://doc.dcloud.net.cn/uni-app-x/uts/utsandroid.html#requestsystempermission
shallUnCheck 配置成 true 测试可以解决这个问题。
本质上是因为 UTSAndroid.requestSystemPermission 所依赖的 XXPermission 框架对过时的权限存在严格校验,配置此参数可以避免校验过时的权限。
针对您提到的在uni-app中使用UTSAndroid.requestSystemPermission
申请android.permission.READ_EXTERNAL_STORAGE
权限时没有弹窗的问题,这通常与Android系统的权限管理策略有关,特别是从Android 6.0(API级别23)开始,对于敏感权限,需要在运行时请求,并且用户需要明确授予权限。以下是一些可能的原因和相应的代码案例,帮助您排查和解决问题。
可能原因
-
Android版本和目标SDK版本:如果您的应用目标SDK版本高于Android 10(API级别29),则
READ_EXTERNAL_STORAGE
权限已被废弃,并被MANAGE_EXTERNAL_STORAGE
或Scoped Storage
(分区存储)机制取代。 -
权限已在manifest中声明但未正确请求:虽然权限在
AndroidManifest.xml
中声明了,但运行时请求代码可能存在问题。 -
系统权限弹窗被系统策略阻止:某些设备或定制ROM可能修改了权限请求的行为。
解决方案代码示例
首先,确保在AndroidManifest.xml
中声明权限(对于Android 9及以下版本):
<manifest ...>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
...
</manifest>
然后,在uni-app中使用以下代码请求权限(注意,这里使用的是uni-app的API封装,具体实现可能需要根据uni-app的版本调整):
// 检查并请求权限
function requestReadStoragePermission() {
#ifdef APP-PLUS
plus.android.requestPermissions(['android.permission.READ_EXTERNAL_STORAGE'], function(event) {
if (event.deniedAlways.length > 0 || event.denied.length > 0) {
console.error('权限申请被拒绝');
} else {
console.log('权限申请成功');
}
});
#endif
}
// 调用函数请求权限
requestReadStoragePermission();
注意事项
- 如果您的应用目标SDK版本是Android 10及以上,应考虑使用
Scoped Storage
或请求MANAGE_EXTERNAL_STORAGE
(对于特定用例,且需用户授予特殊应用访问权限)。 - 确保您的uni-app和HBuilderX开发环境为最新版本,以利用最新的API和修复。
- 在真实设备上进行测试,因为模拟器可能不完全反映真实设备的行为。
如果以上方法仍无法解决问题,建议检查设备的系统日志,以获取更多关于权限请求失败的信息。同时,考虑用户隐私和数据安全,合理使用权限请求。