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
相关产品推荐
相关产品推荐

