一直用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平台即可。
本文链接:https://www.it72.com/12673.htm