You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 7设备调用QR Droid v7.0扫码无结果及返回null问题求助

解决QR Droid v7.0在Android 7设备上扫描返回null的问题

根据你的描述,旧设备上调用QR Droid扫描正常,但Android 7设备返回null,这种情况大概率和Android 7的安全机制变更或者QR Droid v7.0的调用规范调整有关,我整理了几个可行的解决思路和代码调整方案:

一、补全调用参数,适配QR Droid v7.0规范

你代码里那个可选的la.droid.qr.complete参数,在QR Droid v7.0里可能已经变成了必填项——它的作用是强制QR Droid返回扫描结果,而非直接处理内容。另外可以指定扫描类型为URL,避免其他类型二维码的干扰,调整后的调用代码如下:

Intent qrDroid = new Intent("la.droid.qr.scan");
// 强制要求返回扫描结果,此参数在v7.0中大概率为必填
qrDroid.putExtra("la.droid.qr.complete", true);
// 指定只扫描URL类型,过滤无关二维码
qrDroid.putExtra("la.droid.qr.type", "URL");
// 适配Android 7及以上的URI权限限制
qrDroid.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
try {
    startActivityForResult(qrDroid, 0);
} catch (ActivityNotFoundException e) {
    // 别忘了处理QR Droid未安装的情况
    e.printStackTrace();
}

二、严谨处理返回结果逻辑

很多时候返回null是因为onActivityResult里的判断不严谨,一定要先确认resultCode为RESULT_OK且data不为空,再去获取结果:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    // 先匹配请求码和结果状态
    if (requestCode == 0 && resultCode == RESULT_OK) {
        if (data != null) {
            // 用官方指定的key获取扫描结果
            String scannedUrl = data.getStringExtra("la.droid.qr.result");
            if (scannedUrl != null) {
                // 此处处理拿到的URL文本
            } else {
                // 处理结果为空的异常场景
            }
        } else {
            // 处理用户中途取消扫描等导致data为null的情况
        }
    }
}

三、排查权限相关问题

Android 7对权限和URI的管控更严格,再加上Android 6开始的动态权限机制:

  • 确保你的应用已经动态申请了相机权限(虽然是调用QR Droid扫描,但部分设备会因为宿主应用无相机权限,影响第三方扫描工具的正常运行);
  • 检查QR Droid本身是否被授予了相机权限,可以让用户去系统设置里确认并开启。

四、版本兼容性排查

尝试将QR Droid更新到最新版本,v7.0可能存在针对Android 7的兼容性bug,更新后大概率能解决问题。

内容的提问来源于stack exchange,提问作者tm1701

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:59:07