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

20 回复

根据您描述的问题,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 选择相册无反应,这通常与权限配置或系统兼容性有关。以下是排查方向:

  1. 检查权限配置
    确保 AndroidManifest.xml 中已声明相册访问权限:

    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
    

    Android 13+ 需使用 READ_MEDIA_IMAGES 替代旧版 READ_EXTERNAL_STORAGE。若使用云端打包,需在 HBuilderX 项目的 manifest.json 中配置权限。

  2. 动态权限申请
    在调用 uni.chooseImage 前,先申请权限:

    uni.authorize({
      scope: 'scope.album',
      success() {
        uni.chooseImage({ /* 参数 */ });
      },
      fail() {
        // 引导用户手动开启权限
      }
    });
    

    注意:Android 上 scope.album 对应存储权限,需确保用户已授权。

  3. 检查系统相册兼容性
    部分华为机型可能限制应用直接调起系统相册。可尝试仅使用 sourceType: ['album'] 排除相机选项干扰。若仍无效,可测试其他 Android 15 设备,确认是否为机型特定问题。

  4. 云端打包配置
    若使用云端打包,检查 App 权限配置是否勾选“存储空间权限”(对应 Android 13+ 的媒体文件权限)。重新打包后安装测试。

  5. 临时解决方案
    可改用 uni.chooseMedia(支持更现代的媒体选择),但需注意其兼容性要求。示例:

    uni.chooseMedia({
      count: 1,
      mediaType: ['image'],
      success(res) {
        console.log(res.tempFiles[0].tempFilePath);
      }
    });
回到顶部