uni-app 小米9调用uni.chooseImage拍照后APP闪退

uni-app 小米9调用uni.chooseImage拍照后APP闪退

信息类别 详情
产品分类 uniapp/App
PC开发环境 Windows
PC版本号 Windows10
开发工具 HBuilderX
工具版本 3.99
手机系统 Android
手机版本 Android 11
手机厂商 小米
手机型号 MI 9
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

示例代码:

uni.chooseImage({
count: 1,
sizeType: ['original', 'compressed'],
sourceType:['camera'],
success: function(res) {
if (success) {  
}  
}  
})

拍照完成APP闪退

操作步骤:

uni.chooseImage({
count: 1,
sizeType: ['original', 'compressed'],
sourceType:['camera'],
success: function(res) {
if (success) {  
}  
}  
)

拍照完成APP闪退

预期结果:

正常返回拍照图片

实际结果:

闪退

bug描述:

uni.chooseImage({
count: 1,
sizeType: ['original', 'compressed'],
sourceType:['camera'],
success: function(res) {
if (success) {  
}  
}  
)

拍照完成APP闪退


更多关于uni-app 小米9调用uni.chooseImage拍照后APP闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html

11 回复

请问解决了吗,我这边也有这个问题

更多关于uni-app 小米9调用uni.chooseImage拍照后APP闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html


当时没有解决方案,我试了就第一次闪退,第二次接着拍照就不会退了

这个好像是部分手机才会这样

现在安卓9的机型 比如vivo和oppo 都会触发,有没有解决办法

回复 2***@qq.com: 部分安卓机启动拍照吃内存,尝试sizeType: [‘compressed’],不行也没更好办法了。如果可以用chooseImage/chooseMedia选择照片吧

这个问题是不是和手机运行内存有关系?

不确定,我尝试了只有第一个会崩溃,崩溃后立马再打开APP就不会崩溃了

回复 乔小猿: 我这边也是这样,第一次拍照会重启,然后第二次就不会,但是每次打开app拍照必重启…

请问解决了吗

自定义相机可解决

在 uni-app 中,使用 uni.chooseImage 调用相机拍照后出现闪退问题,可能与以下原因有关:


1. 内存不足或图片过大

  • 原因:小米9的相机拍照后生成的图片可能过大,导致内存占用过高,进而引发闪退。
  • 解决方案
    • uni.chooseImage 中设置 compressed 参数为 true,压缩图片:
      uni.chooseImage({
          count: 1, // 默认9
          sizeType: ['compressed'], // 压缩图片
          sourceType: ['camera'], // 相机
          success: function (res) {
              console.log(res.tempFilePaths);
          }
      });
      
    • 如果图片仍然过大,可以进一步通过 uni.compressImage 进行压缩:
      uni.compressImage({
          src: res.tempFilePaths[0],
          quality: 80, // 压缩质量
          success: (compressedRes) => {
              console.log(compressedRes.tempFilePath);
          }
      });
      

2. 权限问题

  • 原因:未正确申请相机或存储权限,导致拍照后无法保存或处理图片。
  • 解决方案
    • manifest.json 中确保已声明相机和存储权限:
      {
          "app-plus": {
              "permissions": [
                  "camera",
                  "writePhotosAlbum",
                  "readPhotosAlbum"
              ]
          }
      }
      
    • 在代码中动态检查并申请权限:
      uni.getSetting({
          success(res) {
              if (!res.authSetting['scope.camera']) {
                  uni.authorize({
                      scope: 'scope.camera',
                      success() {
                          console.log('相机权限已授权');
                      },
                      fail() {
                          uni.showModal({
                              title: '提示',
                              content: '需要相机权限才能使用拍照功能',
                              showCancel: false
                          });
                      }
                  });
              }
          }
      });
      

3. 系统兼容性问题

  • 原因:小米9的MIUI系统可能存在兼容性问题,导致调用相机后闪退。
  • 解决方案
    • 更新 uni-app 版本,确保使用最新的 SDK。
    • 在小米9的开发者选项中,关闭「MIUI优化」选项(如果有)。
    • 尝试在其他设备上测试,确认是否为小米9特有的问题。

4. 代码逻辑问题

  • 原因:拍照后的回调函数中可能存在未处理的异常,导致闪退。
  • 解决方案
    • 检查 uni.chooseImagesuccess 回调函数,确保逻辑正确。
    • 添加 try-catch 捕获异常:
      uni.chooseImage({
          count: 1,
          sourceType: ['camera'],
          success: function (res) {
              try {
                  console.log(res.tempFilePaths);
              } catch (e) {
                  console.error('处理图片时出错:', e);
              }
          },
          fail: function (err) {
              console.error('调用相机失败:', err);
          }
      });
      

5. 硬件问题

  • 原因:小米9的相机硬件或系统可能存在故障。
  • 解决方案
    • 尝试使用其他拍照应用(如系统相机)确认是否为硬件问题。
    • 重启设备或恢复出厂设置。

6. 调试与日志分析

  • 使用 Android Studio 或 HBuilderX 的调试工具,查看日志中是否有异常信息。
  • manifest.json 中开启调试模式:
    {
        "app-plus": {
            "debug": true
        }
    }
回到顶部