yuzhiqiang1993/zxing

使用相同的程序,相同的二维码,只有华为手机通过图片文件时会识别失败

RyoJerryYu opened this issue · 0 comments

使用两部手机,同一个二维码,其中一部扫描、图片读取都能识别,另一部扫描能识别,图片读取不能识别。

库版本

2.2.9

引入方式

使用gradle进行引入

implementation 'com.github.yuzhiqiang1993:zxing:2.2.9'

测试环境

  1. 小米5s(MIUI 10 9.6.20 Beta),Android版本 8.0.0
  2. 华为荣耀X10(Magic UI 3.1.1),Android版本 10
  3. Gradle中Sdk设置
    android {
        compileSdkVersion 30
        buildToolsVersion "30.0.3"
    
        defaultConfig {
            minSdkVersion 21
            targetSdkVersion 30
            ...
        }
        ...
    }
    

再现

  1. 二维码大小33 * 33格,480 * 480像素。图片整体大小1080 * 2400像素。
  2. Manifest中权限声明如下:
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.CAMERA" />
        <uses-permission android:name="android.permission.FLASHLIGHT" />
        <uses-feature android:name="android.hardware.camera" />
        <uses-feature android:name="android.hardware.camera.autofocus" />
        <uses-permission android:name="android.permission.VIBRATE" />
        <uses-permission android:name="android.permission.WAKE_LOCK" />
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    
  3. 使用PermissionX申请动态权限CAMERA, READ_EXTERNAL_STORAGE
    PermissionX
          .init(this)
          .permissions(Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE)
          .request((allGranted, grantedList, deniedList) -> {
              if (!allGranted) {
                  doSomething();
              } else {
                  startTheCaptureActivity();
              }
          });
    
  4. 使用小米调用摄像头扫描该二维码,成功识别。读取该图片,成功识别。
  5. 使用荣耀调用摄像头扫描该二维码,成功识别。读取该图片,识别失败。

疑问

同一部华为手机相同的二维码,扫描能识别而读取图片不能识别,这是什么问题呢?
而另一部小米手机,相同的程序,相同的二维码,扫描读取图片都能识别,证明不是程序问题。
是不是库的兼容性的问题呢?如果是,这个兼容性问题能修复吗?
如果一时不能修复,请问又应如何补救,使得华为手机能识别图片中的二维码呢?
如果修复问题需要我提供测试时使用的二维码图片,可以回复让我提供。