uni-app nvue原生组件Barcode在无相机权限时会自动退出APP

uni-app nvue原生组件Barcode在无相机权限时会自动退出APP

# 操作步骤:
如题

# 预期结果:
如题

# 实际结果:
如题

# bug描述:
如题

| 信息类别       | 信息内容           |
|----------------|--------------------|
| 产品分类       | uniapp/App         |
| PC开发环境     | Windows            |
| PC操作系统版本 | Windows 10专业版   |
| HBuilderX类型  | 正式               |
| HBuilderX版本  | 3.1.22             |
| 手机系统       | Android            |
| 手机系统版本   | Android 10         |
| 手机厂商       | 华为               |
| 手机机型       | P40                |
| 页面类型       | nvue               |
| 打包方式       | 云端               |
| 项目创建方式   | HBuilderX          |

更多关于uni-app nvue原生组件Barcode在无相机权限时会自动退出APP的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app nvue原生组件Barcode在无相机权限时会自动退出APP的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个已知的nvue原生组件权限处理问题。Barcode组件在初始化时会尝试调用相机模块,如果应用没有获取相机权限,系统会抛出异常导致APP闪退。

解决方案:

  1. 动态加载组件:不要直接在template中静态声明<barcode>,改为通过v-if条件渲染。在确保已获取权限后再显示组件。

  2. 权限检查前置:在页面onLoad或组件创建前,先使用uni.authorizeuni.getSetting检查相机权限状态。

代码示例:

// 页面中
onLoad() {
    uni.getSetting({
        success: (res) => {
            if (!res.authSetting['scope.camera']) {
                uni.authorize({
                    scope: 'scope.camera',
                    success: () => {
                        this.hasCameraPermission = true;
                    },
                    fail: () => {
                        // 引导用户手动开启权限
                    }
                });
            } else {
                this.hasCameraPermission = true;
            }
        }
    });
}
<!-- template中 -->
<barcode v-if="hasCameraPermission" ...></barcode>
  1. 异常捕获:在APP.vue中全局监听错误,但此方法只能防止崩溃,不能解决权限问题。

注意:云端打包需在manifest.json中正确配置Android权限:

"permission": {
    "android.permission.CAMERA": {}
}
回到顶部