一直用zxing二维码,但是用户反馈不是很给力,我们还是要奥里给!!!
刚好发现华为鸿蒙2.0发布,看看有没有相关服务,果然华为大佬提供了二维码SDK。接下来开撸……
扫码
Scan Kit支持扫描13种全球主流的码制式。如果您的应用只处理部分特定的码制式,您也可以在接口中指定制式以便加快扫码速度。已支持的码制式:
- 一维码:EAN-8、EAN-13、UPC-A、UPC-E、Codabar、Code 39、Code 93、Code 128、ITF
- 二维码:QR Code、Data Matrix、PDF417、Aztec
在工程下面添加build.gradle添加源
buildscript {
    repositories {        
        maven {url 'http://developer.huawei.com/repo/'}
        ......
    }    
}
allprojects {
    repositories {       
        maven { url 'http://developer.huawei.com/repo/'}
        ......
    }
}在依赖末尾添加
dependencies{ 
  ......
  implementation 'com.huawei.hms:scanplus:1.1.1.301' 
 }在混淆文件添加以下
-ignorewarnings 
-keepattributes *Annotation*  
-keepattributes Exceptions  
-keepattributes InnerClasses  
-keepattributes Signature  
-keepattributes SourceFile,LineNumberTable  
-keep class com.hianalytics.android.**{*;}  
-keep class com.huawei.**{*;}在manifest清单添加权限
<!--相机权限--> <uses-permission android:name="android.permission.CAMERA" /> <!--读文件权限--> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!--使用特性--> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" />
添加activity
<!— 对扫码页面进行声明 --> <activity android:name="com.huawei.hms.hmsscankit.ScanKitActivity" />
参考华为官方demo
public class TestActivity extends Activity {
    public static final int CAMERA_REQ_CODE = 111;
    public static final int DECODE = 1;
    private static final int REQUEST_CODE_SCAN_ONE = 0X01;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        //startScanfCode(1000);
    }
    public void onClick(View v) {
        requestPermission(CAMERA_REQ_CODE, DECODE);
    }
    private void requestPermission(int requestCode, int mode) {
        ActivityCompat.requestPermissions(
                this,
                new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE},
                requestCode);
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        if (permissions == null || grantResults == null) {
            return;
        }
        if (grantResults.length < 2 || grantResults[0] != PackageManager.PERMISSION_GRANTED || grantResults[1] != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        if (requestCode == CAMERA_REQ_CODE) {
            ScanUtil.startScan(this, REQUEST_CODE_SCAN_ONE, new HmsScanAnalyzerOptions.Creator().setHmsScanTypes(HmsScan.QRCODE_SCAN_TYPE).create());
        }
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE_SCAN_ONE) {
            if (data == null)
                return;
            HmsScan obj = data.getParcelableExtra(ScanUtil.RESULT);
            if (obj == null) return;
            MLog.makeText(obj.originalValue);
        }
    }
}上述例子是扫二维码,如果想扫条码或者所有支持的码,将setHmsScanTypes(HmsScan.QRCODE_SCAN_TYPE)改为setHmsScanTypes(HmsScan.ALL_SCAN_TYPE)即可。
正常情况下,应该没问题就能启动了。但是我遇到一个恶心的问题。Suggestion: add 'tools:replace="android:value"',好像是我添加了2个依赖,implementation 'com.huawei.hms:scan:1.1.1.301' 和implementation 'com.huawei.hms:scanplus:1.1.1.301' ,然后就添加以下代码,实际上不需要,去掉implementation 'com.huawei.hms:scan:1.1.1.301'就行了,clean一下,不过如果有其它第三方库出现这种提示,可以参考以下方式替换。
<meta-data tools:replace="android:value" android:name="huawei_module_scankit_local" android:value="1030100" /> <meta-data tools:replace="android:value" android:name="huawei_module_scankit_sdk_version" android:value="scan:1.1.3.301" />
最后引用一下网络图片

最后注意一点,华为扫码的SDK集成arm64-v8a的库,所以你如果使用百度或者自己库没有这个版本的话,会出现错误的。在build.gradle的defautconfig下面添加
        ndk {
            abiFilters 'armeabi', 'armeabi-v7a'
        }指定CPU平台即可。
PS:20211118更新
新版本集成方式已经大不相同,详情请进
值得注意的是:
Gradle 7.0版本后,“allprojects > repositories”配置已迁移到项目级“settings.gradle”文件中。
“settings.gradle”文件配置示例如下:
-  文章2313
-  用户1336
-  访客11754078
十月以魔法和糖果收尾。
 
 























