在使用uni-app安卓16系统下无法获取系统弹窗问题
在使用uni-app安卓16系统下无法获取系统弹窗问题
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Mac | 14.3 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Mac
HBuilderX类型:正式
HBuilderX版本号:4.87
手机系统:Android
手机系统版本号:Android 16
手机厂商:小米
手机机型:所有安卓16版本机型
页面类型:vue
vue版本:vue3
打包方式:云端
操作步骤:
使用plus.android.requestPermissions
const appAuthorizeSetting = uni.getAppAuthorizeSetting()
console.log(appAuthorizeSetting.albumAuthorized,“相册”) //这个输出的相册为。undefined
预期结果:
可以正常弹出弹窗
实际结果:
无法正常弹出弹窗. 仅在安卓16机型下
bug描述:
plus.android.requestPermissions 在所有安卓16下无法弹出系统弹窗导致无法授权
更多关于在使用uni-app安卓16系统下无法获取系统弹窗问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
该bug反馈内容基本完整但存在关键缺失:标题和描述清晰指出了Android 16(即Android 13)下plus.android.requestPermissions无法弹出系统权限弹窗的问题,分类信息详尽(包含HBuilderX 4.87、Android 16、小米机型等关键信息),但代码示例不完整——仅展示了权限状态查询(uni.getAppAuthorizeSetting),缺少核心的权限请求调用代码(plus.android.requestPermissions的具体实现),导致无法直接复现问题。复现步骤过于简略,未说明具体请求的权限类型和调用参数,且实际结果描述模糊("无法弹出"需明确是完全无反应还是静默失败)。
经核查知识库,Android 13对权限系统有重大变更(如细粒度照片权限),且小米等厂商定制ROM常存在权限弹窗拦截机制。知识库明确提示:部分Android ROM(如小米)需手动开启USB安装权限,并强调HBuilderX 3.2.15+版本需正确配置隐私弹窗才能通过应用商店审核。当前HBuilderX 4.87虽较新,但若未按规范配置androidPrivacy.json,可能导致权限流程异常。
建议用户:1) 补充完整权限请求代码示例;2) 确认是否按隐私政策配置指南设置template模式弹窗;3) 检查小米系统设置中"应用权限管理"是否禁用了弹窗显示;4) 升级至HBuilderX最新正式版验证问题。非uni-app-x项目(使用plus API)需特别注意Android厂商定制系统的兼容性问题。 内容为 AI 生成,仅供参考
更多关于在使用uni-app安卓16系统下无法获取系统弹窗问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
plus.android.requestPermissions([‘android.permission.READ_EXTERNAL_STORAGE’],
(e) => {
//关闭
if (e.granted.length>0){
uni.showLoading({
title: t(‘chat.is_saving’)
});
uni.saveImageToPhotosAlbum({
filePath: src,
success: (res) => {
data.showTips = false
uni.hideLoading();
data.iserr = false
uTips.value.show({
title: t(‘mine.save_success’),
type: ‘success’,
duration: ‘2300’
})
},
fail: (err)=> {
data.showTips = false
uni.hideLoading();
data.iserr = true
uTips.value.show({
title: t(‘mine.save_fail’),
type: ‘error’,
duration: ‘2300’
})
}
});
}
此段代码在 Android 15版本下可以 正常弹出。相册授权弹窗,在andorid16下均无法弹出,不清楚您说的 静默或者是完全无反应的区别是什么。在Android 15下可以正确弹出 附件中 授权弹窗Android16下无法弹出
READ_EXTERNAL_STORAGE 从Android 13开始已经废弃,官方也不再建议使用。如果需要访问照片可以使用READ_MEDIA_IMAGES和READ_MEDIA_VIDEO,具体参考文档:https://developer.android.com/reference/android/Manifest.permission#READ_EXTERNAL_STORAGE
问题分析:
根据您的描述,问题出现在 Android 16(即 Android 14)系统上,plus.android.requestPermissions 无法触发系统权限弹窗,且 uni.getAppAuthorizeSetting() 返回的 albumAuthorized 为 undefined。这通常与 Android 14 引入的细粒度媒体权限变更有关。
原因:
从 Android 13(API 33)开始,Google 引入了 READ_MEDIA_IMAGES、READ_MEDIA_VIDEO、READ_MEDIA_AUDIO 等细分权限来替代传统的 READ_EXTERNAL_STORAGE。到 Android 14(API 34),这一变更成为强制要求。如果您的应用 targetSdkVersion 设置为 33 或更高,且未适配新的权限模型,在请求存储/媒体权限时就会出现异常。
解决方案:
-
检查并更新
manifest.json中的权限声明: 确保在manifest.json的App权限配置中,使用的是新的媒体权限,而非旧的存储权限。例如,访问相册应使用:{ "permissions": [ "android.permission.READ_MEDIA_IMAGES", "android.permission.READ_MEDIA_VIDEO" ] } -
检查云端打包的
targetSdkVersion: 在 HBuilderX 中,打开项目的manifest.json,切换到“源码视图”,检查app-plus->distribute->android下的targetSdkVersion。如果低于 33,建议逐步升级至 33 或 34,并同步完成权限适配。 -
使用统一的权限 API: 建议优先使用 uni-app 统一的权限 API
uni.authorize或uni.getSetting来替代plus.android.requestPermissions,以保持跨平台一致性。例如:// 请求相册权限(在Android 14+上会自动映射为 READ_MEDIA_IMAGES) uni.authorize({ scope: 'scope.album', success() { console.log('授权成功'); }, fail(err) { console.log('授权失败', err); } }); -
动态处理 Android 版本差异: 如果仍需使用
plus.android.requestPermissions,建议根据系统版本动态请求对应的权限字符串:const systemInfo = uni.getSystemInfoSync(); const androidVersion = parseFloat(systemInfo.system); let permissions = []; if (androidVersion >= 14) { // Android 14+ permissions = ["android.permission.READ_MEDIA_IMAGES"]; } else if (androidVersion >= 13) { // Android 13 permissions = ["android.permission.READ_MEDIA_IMAGES"]; } else { // Android 13以下 permissions = ["android.permission.READ_EXTERNAL_STORAGE"]; } plus.android.requestPermissions(permissions, function(result) { console.log('权限请求结果', result); }, function(error) { console.error('权限请求失败', error); });

