uni-app 启动扫码获取系统权限点击同意后app闪退

uni-app 启动扫码获取系统权限点击同意后app闪退

操作步骤:

启动扫码获取系统权限点击同意后app闪退
底部tabbar点击【库存】-》【实时库存】-》【右上角条形码】-》同意权限-》白屏闪退

预期结果:

正常使用扫码功能

实际结果:

同意权限后闪退,再打开app可正常使用

bug描述:

启动扫码获取系统权限点击同意后app闪退

开发环境 版本号 项目创建方式
Windows 21H1 HBuilderX
Android 12
华为
meta40pro
vue vue2
云端

更多关于uni-app 启动扫码获取系统权限点击同意后app闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html

7 回复

问题是必现的吗,系统是鸿蒙吗

更多关于uni-app 启动扫码获取系统权限点击同意后app闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html


用3.3.3版本打包的必现,退回3.2.16就正常了 是鸿蒙系统

回复 9***@qq.com: 找了些设备没能复现。能配合验证一下问题吗

回复 DCloud_Android_ST: 需要怎么做

回复 9***@qq.com: 私信你了

HX3.3.10+已修复

这是一个典型的权限请求后应用重启问题,在Android平台上比较常见。

主要原因: 当应用请求敏感权限(如相机权限)时,Android系统可能会触发应用进程重启。如果应用没有正确处理这种场景,就会表现为“闪退”(实际上是重启)。

解决方案:

  1. 检查权限请求时机

    • 避免在应用启动或页面加载时立即请求权限
    • 建议在用户明确触发扫码操作时再请求权限
  2. 使用条件编译处理平台差异

    // #ifdef APP-PLUS
    // 在App端使用plus API请求权限
    plus.android.requestPermissions(['android.permission.CAMERA'], function(result) {
        // 权限回调处理
    }, function(error) {
        console.error('权限请求失败:' + error.message);
    });
    // #endif
    
  3. 优化页面生命周期处理

    • onLoadonShow中检查权限状态
    • 使用uni.getSetting检查权限授权情况
    • 已授权则直接调用扫码,未授权则显示引导提示
  4. 检查Manifest配置 确保AndroidManifest.xml中已正确声明相机权限:

    <uses-permission android:name="android.permission.CAMERA" />
    
  5. 使用try-catch包装扫码调用

    try {
        uni.scanCode({
            success: function(res) {
                console.log('扫码结果:' + res.result);
            }
        });
    } catch (error) {
        console.error('扫码失败:', error);
    }
    

临时验证方法: 在权限回调后添加延迟执行扫码操作,验证是否是时序问题:

setTimeout(() => {
    uni.scanCode({...});
}, 500);
回到顶部