uni-app uni.chooseMedia闪退问题

uni-app uni.chooseMedia闪退问题

开发环境 版本号 项目创建方式
Windows Windows 11 HBuilderX

测试过的手机:

  • HarmonyOS: 4.2.0, 手机厂商: 华为, 手机机型: nova 11
  • 安卓版本: 11, 手机厂商: 小米, 手机机型: Mi9 Pro 5G

示例代码:

uni.chooseMedia({  
    count: 9,  
    mediaType: ['image'],  
    sizeType: ['original','compressed'],  
    sourceType: ['album', 'camera'],  
    success: res => {  
     ...逻辑代码...  
    },  
    fail: (res) => {  
      ....逻辑代码...  
    }  
})

操作步骤:

  • 使用代码示例运行到安卓APP,点击 “从相册选择” 就会出现闪退问题,如果把代码示例中uni.chooseMedia换成uni.chooseImage下边不动就可以正常运行,或者把sourceType中的参数只写一个也可以正常运行。

预期结果:

  • 不闪退

实际结果:

  • 代码示例运行到安卓APP,点击 “从相册选择” 就会出现闪退问题

bug描述:

  • 安卓APP未进行相册媒体授权的时候,调用uni.chooseMedia会出现APP闪退问题。

更多关于uni-app uni.chooseMedia闪退问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

该bug反馈内容较为完整,标题明确描述了uni.chooseMedia闪退问题,提供了详细的复现步骤(安卓APP未授权相册时调用该API闪退)、代码示例和对比情况(uni.chooseImage正常/单sourceType参数正常)。分类信息包含HBuilderX 4.87版本、Vue3、安卓平台等关键信息,但"手机OS平台:全部"表述模糊,应明确为Android。
经核查知识库,该bug成立。知识库文档uni.chooseMedia说明:“在app平台,相册选择使用的是系统相册”,但未提及权限缺失时的异常处理。类似问题记录显示:“在部分低端机如红米上拍照闪退…系统内存不足时ROM回收主activity”(分析报告),表明系统级调用可能因权限问题引发崩溃。当前反馈中同时指定[‘album’,‘camera’]多sourceType触发闪退,符合知识库中提及的特定场景兼容性问题。
建议用户:1) 检查是否已处理Android 13+的分区存储权限;2) 尝试在manifest.json中添加"android.permission.READ_MEDIA_IMAGES"权限声明;3) 参考权限管理文档完善授权逻辑。若仍存在闪退,需提供设备具体Android版本及日志,因知识库指出低端机型可能存在系统级兼容性问题。 内容为 AI 生成,仅供参考

更多关于uni-app uni.chooseMedia闪退问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html


没有人处理吗?确实有这个问题,我也遇到了,鸿蒙4.3系统,调用以下代码就闪退 uni.chooseMedia({ count: 1, mediaType: [‘image’], sizeType: [‘original’, ‘compressed’], sourceType: [‘album’, ‘camera’], success: function (res) { if (success) { success(res.tempFiles) } } })

根据你提供的信息,这很可能是一个权限处理相关的兼容性问题。uni.chooseMedia 在底层实现上与 uni.chooseImage 不同,当 sourceType 同时包含 ['album', 'camera'] 时,框架可能会尝试同时申请相册和相机权限。在部分安卓机型或系统版本上,如果应用尚未获得相关权限,权限申请的并发或顺序处理不当会导致应用崩溃。

临时解决方案:

  1. 分步引导(推荐):不要同时提供两个选项。可以先通过一个界面让用户选择“拍照”或“从相册选择”,然后根据用户选择,调用只包含单个 sourceType 参数的 uni.chooseMedia

    // 例如用户点击“从相册选择”后
    uni.chooseMedia({
        count: 9,
        mediaType: ['image'],
        sourceType: ['album'], // 只保留一个来源
        success: (res) => {}
    });
    
  2. 主动预申请权限:在应用启动或进入相关功能页时,提前动态申请所需的存储和相机权限。

    // 使用 uni.authorize 提前请求权限
    uni.authorize({
        scope: 'scope.writePhotosAlbum', // 相册权限
        success() { /* 已授权 */ },
        fail() { /* 处理拒绝 */ }
    });
    // 注意:相机权限 scope.camera 可能需要单独申请
回到顶部