uni-app uni.chooseImage从相册选择在华为P50上没有任何反应
uni-app uni.chooseImage从相册选择在华为P50上没有任何反应
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | win11 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
PC开发环境操作系统版本号:win11
HBuilderX类型:正式
HBuilderX版本号:4.85
手机系统:Android
手机系统版本号:Android 15
手机厂商:华为
手机机型:P50
页面类型:vue
vue版本:vue3
打包方式:云端

示例代码:
uni.chooseImage({
count: 1, //最大数量
sourceType: ['album','camera'], //从相册选择或拍照'album','camera'
success(res) {
//console.log(res.tempFiles)
// 获取的格式是数组,多选会同时返回,单选只返回一项
_this.imgArr.push(res.tempFiles[0].path)
_this.uploadPic(type);
}
})
操作步骤:
- 点击相机按钮-选择从相册选择
预期结果:
- 打开手机相册选择照片
实际结果:
- 没有任何反应
### bug描述:
uni.chooseImage从相册选择没有任何反应。
更多关于uni-app uni.chooseImage从相册选择在华为P50上没有任何反应的实战教程也可以访问 https://www.itying.com/category-93-b0.html
根据您描述的问题,uni.chooseImage在华为P50上无反应,结合知识库信息分析如下:
可能原因:华为设备(尤其是运行HarmonyOS的机型)对系统相册权限管理较严格。您的HBuilderX 4.85版本虽满足App端4.52+的要求,但华为P50实际可能运行HarmonyOS而非纯Android,需特别注意鸿蒙平台兼容性。
解决方案建议:
检查manifest.json中是否添加了相册权限声明(“android.permission.READ_EXTERNAL_STORAGE”)
尝试改用5+ API实现:camera模块文档,因其底层调用更可控
更新至HBuilderX 4.86 alpha版(最新版本可能修复兼容性问题)
若仍无效,可考虑使用插件市场的相册选择增强插件
注意事项:鸿蒙平台与Android原生实现存在差异,知识库中明确标注HarmonyOS需HBuilderX 4.23+支持。建议优先通过5+ API定制化处理,避免系统相册UI兼容性问题。
参考文档:uni.chooseImage API文档 内容为 AI 生成,仅供参考
更多关于uni-app uni.chooseImage从相册选择在华为P50上没有任何反应的实战教程也可以访问 https://www.itying.com/category-93-b0.html
可以使用uni.createRequestPermissionListener()这个api监听下用啥权限,然后去manifest.json里面加相对应的权限;
存储权限有:WRITE_EXTERNAL_STORAGE、READ_EXTERNAL_STORAGE、READ_MEDIA_IMAGES
{ “errMsg”: “chooseImage:fail No Permission”, “code”: 12 }
manifest.json添加完权限,需要重新打包(云打包选择传统打包)
回复 山港科技口岸: 你这个提示不就是没有权限吗?可以按照我说去看看需要什么权限
回复 蔡cai: “permissions” : [ “<uses-feature android:name=“android.hardware.camera”/>”, “<uses-feature android:name=“android.hardware.camera.autofocus”/>”, “<uses-permission android:name=“android.permission.ACCESS_LOCATION_EXTRA_COMMANDS”/>”, “<uses-permission android:name=“android.permission.ACCESS_MOCK_LOCATION”/>”, “<uses-permission android:name=“android.permission.CALL_PHONE”/>”, “<uses-permission android:name=“android.permission.MODIFY_AUDIO_SETTINGS”/>”, “<uses-permission android:name=“android.permission.ACCESS_COARSE_LOCATION”/>”, “<uses-permission android:name=“android.permission.ACCESS_FINE_LOCATION”/>”, “<uses-permission android:name=“android.permission.ACCESS_NETWORK_STATE”/>”, “<uses-permission android:name=“android.permission.ACCESS_WIFI_STATE”/>”, “<uses-permission android:name=“android.permission.CAMERA”/>”, “<uses-permission android:name=“android.permission.READ_EXTERNAL_STORAGE”/>”, “<uses-permission android:name=“android.permission.WRITE_EXTERNAL_STORAGE”/>”, “<uses-permission android:name=“android.permission.READ_MEDIA_IMAGES”/>”, “<uses-permission android:name=“android.permission.READ_MEDIA_VIDEO”/>”, “<uses-permission android:name=“android.permission.CHANGE_NETWORK_STATE”/>”, “<uses-permission android:name=“android.permission.CHANGE_WIFI_STATE”/>”, “<uses-permission android:name=“android.permission.FLASHLIGHT”/>”, “<uses-permission android:name=“android.permission.GET_ACCOUNTS”/>”, “<uses-permission android:name=“android.permission.MOUNT_UNMOUNT_FILESYSTEMS”/>”, “<uses-permission android:name=“android.permission.READ_LOGS”/>”, “<uses-permission android:name=“android.permission.READ_PHONE_STATE”/>”, “<uses-permission android:name=“android.permission.VIBRATE”/>”, “<uses-permission android:name=“android.permission.WAKE_LOCK”/>”, “<uses-permission android:name=“android.permission.WRITE_SETTINGS”/>”, “<uses-permission android:name=“android.permission.INSTALL_PACKAGES”/>”, “<uses-permission android:name=“android.permission.REQUEST_INSTALL_PACKAGES”/>”, "<uses-permission android:name=“android.permission.START_ACTIVITIES” /> ", "<uses-permission android:name=“android.permission.FOREGROUND_SERVICE” /> ", “<uses-permission android:name=“android.permission.RECEIVE_BOOT_COMPLETED” />”, "<uses-permission android:name=“android.permission.GET_TASKS” /> ", “<uses-permission android:name=“android.permission.SCHEDULE_EXACT_ALARM” />”, "<uses-permission android:name=“android.permission.SET_ALARM”/> ", “<uses-permission android:name=“android.permission.USE_EXACT_ALARM”/>”, “<uses-permission android:name=“android.permission.POST_NOTIFICATIONS” />”, "<uses-permission android:name=“android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS” /> ", “<uses-permission android:name=“android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK”/>”, “<uses-permission android:name=“android.permission.CHANGE_CONFIGURATION”/>”, “<uses-permission android:name=“android.permission.ACCESS_BACKGROUND_LOCATION”/>” ],
该加的权限都加了
回复 山港科技口岸: 有重新打包吗?选的是传统打包吗?更新manifest.json不能使用快速安心打包,要不会不生效
回复 蔡cai: 传统打包方式,打的自定义基座
回复 山港科技口岸: 我去试下,等会
回复 山港科技口岸: 测试我自己的手机正常,安卓11
回复 蔡cai: 我在小米和vivo上试了都没问题,就是华为p50上不行
回复 山港科技口岸: 你有手机测试吗,有的话使用uni.createRequestPermissionListener()这个api去监听触发哪个权限,对比下manifest.json文件的权限列表;如果manifest.json有,那就重新打包试试
{
“errMsg”: “chooseImage:fail No Permission”,
“code”: 12
}
调用chooseImage之间是否调用其他API申请了权限?或者提供一个简单的demo我这边试一下。
没有其他权限是申请,就是最简朴的 uni.chooseImage({ count: 1,//最大数量 sourceType: [‘album’,‘camera’], //从相册选择或拍照’album’,‘camera’ success(res) { //console.log(res.tempFiles) // 获取的格式是数组,多选会同时返回,单选只返回一项 _this.imgArr.push(res.tempFiles[0].path) _this.uploadPic(type); }, fail(res){ console.log(res) } }) 选择“从相册选择”既不弹窗权限也不打开相册
回复 山港科技口岸: 其他手机有没有这个问题,我这边测试几款手机没问题,手头暂时没有p50的设备。
回复 DCloud_Android_zl: 我在小米和vivo上试了都没问题,就是华为p50上不行
能想到的权限都加上了
“permissions” : [
“<uses-feature android:name=“android.hardware.camera”/>”,
“<uses-feature android:name=“android.hardware.camera.autofocus”/>”,
“<uses-permission android:name=“android.permission.ACCESS_LOCATION_EXTRA_COMMANDS”/>”,
“<uses-permission android:name=“android.permission.ACCESS_MOCK_LOCATION”/>”,
“<uses-permission android:name=“android.permission.CALL_PHONE”/>”,
“<uses-permission android:name=“android.permission.MODIFY_AUDIO_SETTINGS”/>”,
“<uses-permission android:name=“android.permission.ACCESS_COARSE_LOCATION”/>”,
“<uses-permission android:name=“android.permission.ACCESS_FINE_LOCATION”/>”,
“<uses-permission android:name=“android.permission.ACCESS_NETWORK_STATE”/>”,
“<uses-permission android:name=“android.permission.ACCESS_WIFI_STATE”/>”,
“<uses-permission android:name=“android.permission.CAMERA”/>”,
“<uses-permission android:name=“android.permission.READ_EXTERNAL_STORAGE”/>”,
“<uses-permission android:name=“android.permission.WRITE_EXTERNAL_STORAGE”/>”,
“<uses-permission android:name=“android.permission.READ_MEDIA_IMAGES”/>”,
“<uses-permission android:name=“android.permission.READ_MEDIA_VIDEO”/>”,
“<uses-permission android:name=“android.permission.CHANGE_NETWORK_STATE”/>”,
“<uses-permission android:name=“android.permission.CHANGE_WIFI_STATE”/>”,
“<uses-permission android:name=“android.permission.FLASHLIGHT”/>”,
“<uses-permission android:name=“android.permission.GET_ACCOUNTS”/>”,
“<uses-permission android:name=“android.permission.MOUNT_UNMOUNT_FILESYSTEMS”/>”,
“<uses-permission android:name=“android.permission.READ_LOGS”/>”,
“<uses-permission android:name=“android.permission.READ_PHONE_STATE”/>”,
“<uses-permission android:name=“android.permission.VIBRATE”/>”,
“<uses-permission android:name=“android.permission.WAKE_LOCK”/>”,
“<uses-permission android:name=“android.permission.WRITE_SETTINGS”/>”,
“<uses-permission android:name=“android.permission.INSTALL_PACKAGES”/>”,
“<uses-permission android:name=“android.permission.REQUEST_INSTALL_PACKAGES”/>”,
"<uses-permission android:name=“android.permission.START_ACTIVITIES” /> ",
"<uses-permission android:name=“android.permission.FOREGROUND_SERVICE” /> ",
“<uses-permission android:name=“android.permission.RECEIVE_BOOT_COMPLETED” />”,
"<uses-permission android:name=“android.permission.GET_TASKS” /> ",
“<uses-permission android:name=“android.permission.SCHEDULE_EXACT_ALARM” />”,
"<uses-permission android:name=“android.permission.SET_ALARM”/> ",
“<uses-permission android:name=“android.permission.USE_EXACT_ALARM”/>”,
“<uses-permission android:name=“android.permission.POST_NOTIFICATIONS” />”,
"<uses-permission android:name=“android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS” /> ",
“<uses-permission android:name=“android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK”/>”,
“<uses-permission android:name=“android.permission.CHANGE_CONFIGURATION”/>”,
“<uses-permission android:name=“android.permission.ACCESS_BACKGROUND_LOCATION”/>”
],
根据你的描述,在华为P50(Android 15)上调用 uni.chooseImage 选择相册无反应,这通常与权限配置或系统兼容性有关。以下是排查方向:
-
检查权限配置
确保AndroidManifest.xml中已声明相册访问权限:<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />Android 13+ 需使用
READ_MEDIA_IMAGES替代旧版READ_EXTERNAL_STORAGE。若使用云端打包,需在 HBuilderX 项目的manifest.json中配置权限。 -
动态权限申请
在调用uni.chooseImage前,先申请权限:uni.authorize({ scope: 'scope.album', success() { uni.chooseImage({ /* 参数 */ }); }, fail() { // 引导用户手动开启权限 } });注意:Android 上
scope.album对应存储权限,需确保用户已授权。 -
检查系统相册兼容性
部分华为机型可能限制应用直接调起系统相册。可尝试仅使用sourceType: ['album']排除相机选项干扰。若仍无效,可测试其他 Android 15 设备,确认是否为机型特定问题。 -
云端打包配置
若使用云端打包,检查 App 权限配置是否勾选“存储空间权限”(对应 Android 13+ 的媒体文件权限)。重新打包后安装测试。 -
临时解决方案
可改用uni.chooseMedia(支持更现代的媒体选择),但需注意其兼容性要求。示例:uni.chooseMedia({ count: 1, mediaType: ['image'], success(res) { console.log(res.tempFiles[0].tempFilePath); } });

