uni-app 调用 uni.chooseImage 方法在红米 Note 11T Pro 和小米 11 Pro 上拍照点勾后会闪退

发布于 1周前 作者 yuanlaile 来自 Uni-App

uni-app 调用 uni.chooseImage 方法在红米 Note 11T Pro 和小米 11 Pro 上拍照点勾后会闪退

开发环境 版本号 项目创建方式
Mac macOS 13.2.1 CLI 2.7.12

产品分类:uniapp/App

PC开发环境操作系统:Mac

手机系统:Android

手机系统版本号:Android 12

手机厂商:小米

手机机型:11 pro 和 红米 Note 11T Pro

页面类型:vue

vue版本:vue2

打包方式:云端


示例代码:

 uni.chooseImage({  
      count:1,  
      sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有  
      sourceType: ['camera'], // 相机拍照  
      success: (res)=>{  
        console.log(JSON.stringify(res.tempFilePaths));  
      },  
      fail: (err)=>{  
        console.log(JSON.stringify(err));  
      },  
    });

53 回复

对,这个问题一直存在。就是会出现在一些不同机型的手机上。之前我也有录像,收集日志提供反馈给官方uni技术,但好像都没有解决此问题。好像从HBuilder X3.4.6版左右开始。开始打包,不管是【传统打包】还是【快速安心打包】。就开始得到用户反馈 ,拍照片时点击完成时,应用就直接自动闪退重启!后来HBuilder X 不同升级版 我都进行测试 也是问题依旧!,也有单纯的使用官方 uni.chooseImage()调用也是会出现问题!直接编译运行官方提供的hello uniapp项目里的拍照功能也会出现这个问题。截止今天2023-03-16使用HBuilder X3.7.3.20230223版编译云打包后 安装包也是会出现应用闪退重启!我反复拍照十几次都闪退重启!没办法,我只能反复的把app进程杀死,反复手动打开app进行拍照。才恢复正常。后面又出现问题。 像今天打包的用vivo android10 V1911A 手机上,软件压根就没法使用!每一次拍照都闪退!救不了==50次拍照就有46次闪退重启。 没办法。官方没给出解决问题。我只能反复捣腾。发现有一条重要的线索:进去手机权限设置,在应用单项权限设置里不管你用没用到!就必须把9项权限全部允许!!【1.自启动(后台启动)、2.悬浮窗、3.锁屏显示、4.后台弹出界面、5.访问设备状态信息、 6.定位手机(始终允许)、7.使用摄像头、8.修改系统设置、9.安装未知应用】。然后再去使用你的软件,就会发现,没闪退重启了。 个人觉得 问题就出在 官方的兼容或机制分配 点上。希望官方技术 往这条线索方向 优化优化。。 有出现此类问题的朋友 试试我的临时方法 看有没有效果。我这边是得到实践效果了


还有1项:10.存储权限 也要允许

云打包appid发下 我这边看下配置

回复 DCloud_Android_ST: UNI132454E

回复 3***@qq.com: 你是安心打包 提供下QQ具体看下问题

回复 DCloud_Android_ST: 对,今天是安心打包的,调式基座也是直接传统打包(上传正式版的代码项目),然后云打包发布版选择安心模式打包的。QQ号等联系信息,你们后台应该可以查到。隐私信息就不公开在网络上了

回复 3***@qq.com: 兄弟,这个问题修复了没?

回复 3***@qq.com: 老哥,问题解决了么。方便提供一个联系方式么

这个问题解决了吗,我们也遇到了

最近公司项目用测试机也测到了这个问题,测试机:真机-红米Note11T Pro Android 13 MIUI 14、云机-红米Note10T Android 13,研究了一下,和 uniapp 无关,纯粹是系统太坑,出现这问题的原因是:
应用后台优先级不够,在调用相机拍摄时进入后台,在按下拍摄键时需要大量的内存资源,此时如果内存不够或你的应用优先级太低时,会被系统回收资源。
如果有使用手机服务商的推送通知服务可以提升自己的应用优先级,比如小米会给配置了 mipush 的应用开启一个专属的通知进程,优先级很高,但是在高版本 Android 上这个通知进程也很容易被杀死,没用。
如果不想拍照的时候被系统杀进程,需要提升自己的应用优先级,也就是保活,在同一优先级下内存占用高的会更容易被杀死,适当的释放页面也很有用,uni.onMemoryWarning 可以侦听内存告警事件。
目前我是做了前台服务来保活,还没有更新发版,不确定能不能审核通过,同事说之前有做保活,但是被小米和应用宝的给打回了。

这个问题好像跟机型没关系,什么品牌的都出现过,2023年了官方还没给出解决方法吗?

试了下,暂时只有Android 12 的小米品牌拍照出问题。其他android 系统能拍照,也能获取图片地址。

回复 c***@163.com: 我的小米11 pro就没问题,但是同事的小米(具体什么型号不清楚)就不行

回复 c***@163.com: 我搜到一个这个帖子,我还没试呢,你可以参考参考https://ask.dcloud.net.cn/question/149814

回复 FE_liyangyang: 看Android 版本吧,我周围的小米手机,除了Android 12有问题外,其他的Android版本都没问题。现在初步断定是android 12后,新增权限后出现问题

回复 c***@163.com:你有啥解决方案没?,是不是内存不足导致的,把别的应用都关闭还是会复现?主要我的是小米11 pro(安卓12)没有复现,怎么测试都复现不了,但是一直有使用的人反馈这个问题

回复 c***@163.com: 应该就是运行内存问题,你那出问题有运行是12+的吗?

回复 FE_liyangyang: 没有解决方案,因为出现的原因也没有找到。现在只知道在android 12上有问题。其他没有。只运行一个也会闪退重启。小米11 pro是12+的,但红米 Note 11T Pro 不是12+。

回复 c***@163.com: 我这11pro 复现不了,你看这个帖子https://ask.dcloud.net.cn/question/126116,你是不是也渲染图片了,你试试可以复现的手机不渲染,可不可以解决

回复 FE_liyangyang: 我是还没到渲染界面就闪退重启,特地看了拍出来的图片看大小,就2M。应该不是图片问题,现在怀疑2种情况,要么是云端的安卓没有添加适配 Android 12的权限。要么HBuilderX 3.7的问题,因为HBuilderX 版本为 3.6.18 是能调用拍照的,也不会闪退重启,但因为某些功能必须升级到alpha后,就出现这问题了。

回复 c***@163.com: 我的是3.6.18小米11 pro是正常的,反应这个问题的是Rdemi Note 11T pro(6+)

回复 FE_liyangyang: 这种就很难排查了,我降级不是,不降级又不是。Android 自己搞个离线打包?

回复 c***@163.com: 关键我不会配置离线包,我查一天了,也没啥思路,主要我这没有复现机型,是别的同事反馈的

回复 FE_liyangyang: 我也不会配置离线包。我找了一部新电脑运行 HBuilderX 3.6.18,发现 Rdemi Note 11T pro(6+) 确实会闪退,小米 11 pro 不会。那把 HBuilderX 升级到 3.7.2,11 Pro就能复现了。

回复 c***@163.com: HBuilderX 升级到 3.7.2,但是自定义基座的SDK是3.7.1 ,然后我的11 Pro还是复现不了

回复 c***@163.com: 有人联系你解决吗?

回复 FE_liyangyang:我这边一直是这种情况,也不知道怎么解决,就 Rdemi Note 11T pro 会,这就很奇怪。领导打算让Rdemi Note 11T pro 升级到 MIUI 14看看会不会

回复 c***@163.com: 3.7.3的版本打包试没?还有那个问题吗?

看下手机设置 开发者选项 进入找到“后台进程限制” 是否为标准限制 不是改下 然后再运行看看

是标准限制。试过只开了使用的app,没有开启其他app,试过压缩图片。但都不行,因为拍完照后,都还没返回app 就闪退重启回到首页。就Rdemi Note 11T pro 会闪退,其他的设备不会。

回复 c***@163.com: 看过你的视频 不是闪退像是重启了 你试过云打包正式版有这个问题吗

回复 DCloud_Android_ST: 有的,3.6.18版本打包的Redmi Note 11T Pro(6+128)

回复 DCloud_Android_ST: 下面有效果视频

回复 FE_liyangyang: 你用demo打个正式版包 然后测试 如个可以复现就提供下下载链接

回复 DCloud_Android_ST: 有,云打包,测试包都会,就是app 闪退,然后重启

回复 DCloud_Android_ST: 用户仍然反馈此问题android 12 realme RMX3042(真我-q3)机型点击拍照后APP直接重启

回复 DCloud_Android_ST:复现视频已经私信

这个是3.6.18版本打包的Redmi Note 11T Pro的效果,App直接重启 别的机型暂时目前没有反馈这个问题

目前我这边收集到的有小米12、小米9se 调用相机拍照,勾选后会重启app。其他机型还未发现。请官方再排查排查!

一样的 我也是部分机型闪退. uni.chooseImage() 方法 不管是拍照还是选择照片 选择完点确定然后APP就会重启

我是图片预览时闪退

有解决方案吗?我最近也碰到这个问题了

今天遇到同样的问题

你好,想问下解决了吗

插眼 这个问题什么时候能修复

小米9 , android 11。拍照也会闪退!

大佬 解决了吗

机型:小米 redmi note 9 手机设置-开发者选项-应用-不保留活动(用户离开后即销毁每个活动)是否关闭

快2025年 我也遇到这个问题了HX版本已经是4.36了

解决了吗,大佬,我也遇到了

针对您提到的在红米 Note 11T Pro 和小米 11 Pro 上使用 uni-app 调用 uni.chooseImage 方法拍照后点勾闪退的问题,这通常可能是由于设备兼容性问题、内存管理不当或系统权限设置等原因导致的。由于无法直接复现和调试您的具体环境,我将提供一个简化的代码示例和一些可能的解决思路,希望能帮助您定位和解决问题。

简化代码示例

首先,确保您的 uni-app 项目中正确调用了 uni.chooseImage 方法。以下是一个基本的调用示例:

export default {
  methods: {
    chooseImage() {
      uni.chooseImage({
        count: 1, // 默认9
        sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
        sourceType: ['camera'], // 从相机选择
        success: (res) => {
          console.log('选择图片成功', res.tempFilePaths);
          // 此处可以处理选中的图片路径,如上传到服务器等
        },
        fail: (err) => {
          console.error('选择图片失败', err);
        },
        complete: () => {
          console.log('选择图片完成');
        }
      });
    }
  }
}

可能的问题与解决思路

  1. 内存管理

    • 检查应用是否在处理大图片时内存使用过高。可以尝试压缩图片后再处理,减少内存占用。
  2. 权限问题

    • 确保应用在 manifest.json 中已正确配置相机和存储权限。
    • 检查用户是否在设备上授予了这些权限。
  3. 系统兼容性问题

    • 尝试更新 uni-app 框架和依赖库到最新版本。
    • 查看是否有其他开发者遇到类似问题,并检查是否有相关的官方修复或补丁。
  4. 错误处理

    • 增强错误处理逻辑,尤其是在 fail 回调中,尝试捕获更多错误信息。
  5. 日志记录

    • successfailcomplete 回调中添加详细的日志记录,有助于分析问题发生的具体环节。
  6. 设备特定问题

    • 考虑是否是特定设备型号或MIUI系统的bug,可以尝试在小米社区或相关开发者论坛搜索是否有类似问题报告。

如果上述方法仍无法解决问题,建议收集详细的崩溃日志,并联系小米开发者支持或uni-app官方寻求更专业的帮助。

回到顶部