uni-app中uni.scanCode调用导致黑屏无画面

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

uni-app中uni.scanCode调用导致黑屏无画面

开发环境 版本号 项目创建方式

无论什么版本安卓手机,首次完成apk安装后,用户在使用相册中的二维码完成第一次扫码后,再次触发扫码,摄像头无画面黑屏。需要退出程序,关掉后台,再次进入,才没有黑屏问题出现

41 回复

HBuilderX 4.02.2024030621-alpha 已修复。


您好,经测试无法复现该问题,可否提供一下测试工程或代码方便排查

我给你apk可以吗

我的hbuilderX是这个版本 3.8.4.20230531;

回复 LPFFFF: apk看不到代码也不好排查呀

回复 JXWang: 就这段,我直接调用的。

回复 LPFFFF: apk也行,我先看看能不能找到些线索

再次触发扫码会走到fail里吗

回复 JXWang: 打包完或者真机调试就会出现。杀掉后台又好了。安卓9,13,14都试过

回复 JXWang: 不会,黑屏情况直接退出就会走fail

回复 JXWang: 黑屏情况下,相册还是能正常识别的,就相机没画面了

回复 JXWang: 可能跟二维码内容有关,如果二维码内容res.result不包含&,那么success里边的代码就会报错,可以在前边加一个判断,判断是否包含&,if(res.result.indexOf(’&’) !== -1) { }

回复 JXWang: 按道理试过很多二维码和手机都必现这个黑屏bug。那我再试下

回复 JXWang: 还是不行哦。安装完,相同二维码连续第二次,相机画面就出不来了。还是退出后重进就可以了

回复 LPFFFF: 控制台是否有报错

回复 JXWang: 没有,只有我console出来的那段信息

67202c5f5ed29e80dcd7cb8b0fa24546&u8700&u8700

回复 JXWang: 这是我二维码的内容

回复 LPFFFF: 稍等我下载个3.8.4版本的hbx试一下

回复 JXWang: 我刚刚试了 Hello uni-app的官方模板,也是同样的情况

回复 LPFFFF: 您是在开发阶段真机运行就会遇到这个问题,还是只有打包成apk后安装才有问题

回复 JXWang: 真机,和打包apk后都有。都是第一次安装后出现。Hello uni-app模板,我调扫码也有这问题。杀掉后台,再进就好了。

回复 JXWang: 您那边没有吗,或者我直接从哪边给你发个apk的包,您试试

回复 LPFFFF: manifest.json里有个app模块配置,看看是否勾选了扫码模块

回复 LPFFFF: 我这边用3.8.4试了一下,依旧没有复现

回复 JXWang: 我这边100%必现。我换了个电脑,下了最新的hbx,然后创建了hello uniapp那个项目,然后真机调试了下,也出现了。第一次扫相册二维码,退出去,再触发扫码,相机就无画面了。

回复 JXWang: 一定是第一次安装后

回复 LPFFFF: 感谢反馈,已确认该问题,正在排查

如果需要从相册选图,可以在调用 uni.scanCode 之前完成相册授权,比如进入首页的时候获取权限,https://ext.dcloud.net.cn/plugin?id=594 permision.judgeIosPermission(“photoLibrary”)

谢谢。但是连续扫码第一次都是正常的,第二次不行。相册始终可以可以访问识别的

回复 LPFFFF: 可以到应用设置里看看相机的权限是否设置成 仅在使用中允许

回复 JXWang: 确实是仅在使用中允许

回复 JXWang: 改成每次使用询问也没用。

问题已确认,感谢反馈,已加分

你好,请问这个问题有解决方案了吗?

这个基础uni.scanCode竟然还有这么多问题~

我也遇到这个问题, 很久之前就有了,
安卓手机第一安装都有这个情况

我也遇到这个问题, HbuilderX 3.96, 如果第一次打开扫码界面没有扫码, 按了返回按钮, 100% 复现 如果正常执行扫码, 则能再继续扫几个之后还是会出现, 概率不定

请问有解决方案了吗?

去插件市场使用扫码插件 不要用这个 这个问题很早就有了

在uni-app中使用uni.scanCode调用扫码功能时,如果出现黑屏无画面的问题,可能是由于以下几个原因导致的。你可以根据以下步骤进行排查和解决:

1. 权限问题

  • 问题描述:在某些设备上,如果没有正确获取摄像头权限,可能会导致黑屏。
  • 解决方案
    • 确保在manifest.json中已经配置了摄像头权限:
      "permission": {
          "scope.userLocation": {
              "desc": "你的位置信息将用于小程序位置接口的效果展示"
          },
          "scope.camera": {
              "desc": "需要使用你的摄像头进行扫码"
          }
      }
    • 在调用uni.scanCode之前,可以通过uni.authorize请求用户授权:
      uni.authorize({
          scope: 'scope.camera',
          success() {
              uni.scanCode({
                  success(res) {
                      console.log('扫码结果:', res.result);
                  },
                  fail(err) {
                      console.error('扫码失败:', err);
                  }
              });
          },
          fail(err) {
              console.error('授权失败:', err);
          }
      });

2. 摄像头占用问题

  • 问题描述:如果摄像头被其他应用占用,可能会导致黑屏。
  • 解决方案
    • 确保在调用uni.scanCode之前,没有其他应用在使用摄像头。
    • 可以在调用uni.scanCode之前,尝试关闭其他可能占用摄像头的应用。

3. 设备兼容性问题

  • 问题描述:某些设备可能存在兼容性问题,导致摄像头无法正常启动。
  • 解决方案
    • 尝试在其他设备上运行相同的代码,确认是否是设备问题。
    • 如果是特定设备的问题,可能需要针对该设备进行特殊处理或联系设备厂商。

4. 代码逻辑问题

  • 问题描述:代码逻辑错误可能导致扫码功能无法正常启动。
  • 解决方案
    • 确保uni.scanCode的调用逻辑正确,例如在合适的生命周期或事件中调用。
    • 检查是否有其他代码逻辑影响了扫码功能的正常执行。

5. uni-app版本问题

  • 问题描述:某些版本的uni-app可能存在bug,导致扫码功能异常。
  • 解决方案
    • 尝试更新uni-app到最新版本,或者回退到一个已知稳定的版本。
    • 检查uni-app官方文档或社区,看看是否有类似的问题和解决方案。

6. 真机调试

  • 问题描述:在模拟器上运行时,扫码功能可能无法正常工作。
  • 解决方案
    • 确保在真机上进行调试和测试,模拟器可能无法完全模拟摄像头的功能。

7. 错误处理

  • 问题描述:如果扫码失败或出现异常,没有正确处理错误可能导致黑屏。
  • 解决方案
    • uni.scanCodefail回调中添加错误处理逻辑,打印或处理错误信息:
      uni.scanCode({
          success(res) {
              console.log('扫码结果:', res.result);
          },
          fail(err) {
              console.error('扫码失败:', err);
          }
      });
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!