uniapp 扫码黑屏
问题描述
uniapp 开发中调用扫码功能时出现黑屏现象,可能由权限配置、相机调用失败或兼容性问题导致。以下是常见原因及解决方案:
检查相机权限
确保应用已获取相机权限。在 manifest.json 中配置以下权限(H5 和 App 需分别处理):
// Android 权限配置
"permission": {
"android.permission.CAMERA": {
"request": "always"
}
}
H5 端需通过浏览器弹窗手动授权,App 端需在代码中动态申请权限:
// 示例:动态检查权限
uni.authorize({
scope: 'scope.camera',
success() { console.log('授权成功'); },
fail() { console.log('授权失败'); }
});
确认扫码 API 调用方式
使用 uni.scanCode 时需检查参数是否正确,避免因参数缺失导致黑屏:

uni.scanCode({
success(res) { console.log(res.result); },
fail(err) { console.error('扫码失败:', err); }
});
若需自定义扫码界面,检查 camera 组件是否正常渲染:
<template>
<camera style="width: 100%; height: 300px;"></camera>
</template>
排查设备兼容性问题
部分 Android 机型可能因相机驱动问题导致黑屏。测试不同设备或模拟器,确认是否为特定机型问题。
可尝试降级 HBuilderX 版本或更新原生插件(如 uni-app 官方扫码插件)。
检查原生层配置
App 端需在原生配置文件中(如 AndroidManifest.xml)添加相机权限:

<uses-permission android:name="android.permission.CAMERA" />
iOS 端需在 Info.plist 中添加描述:
<key>NSCameraUsageDescription</key>
<string>用于扫码功能</string>
调试日志分析
开启调试模式,查看控制台日志:
// 在扫码前打印日志
console.log('调用扫码API前');
uni.scanCode({
success(res) { console.log('扫码结果:', res); },
fail(err) { console.error('错误详情:', err); }
});
若日志显示权限拒绝或相机初始化失败,需针对性解决。
其他可能原因
- H5 端限制:部分浏览器不支持直接调用摄像头,需使用 HTTPS 协议。
- 虚拟机问题:Android 模拟器可能无摄像头硬件,导致黑屏,建议真机测试。
- 第三方插件冲突:检查是否与其他原生插件(如地图)冲突,尝试禁用插件排查。
通过逐步排除上述问题,通常可解决扫码黑屏现象。






