Android工程集成华为扫码SDK

Home / Android MrLee 2020-12-17 2618

一直用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”文件配置示例如下:


本文链接:https://www.it72.com/12673.htm

推荐阅读
最新回复 (0)
返回