一直用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”文件配置示例如下:
- 文章2300
- 用户1336
- 访客10859210
真正的成功是激励他人行动。
语法错误: 意外的令牌“标识符”
全面理解Gradle - 定义Task
Motrix全能下载工具 (支持 BT / 磁力链 / 百度网盘)
谷歌Pixel正在开始起飞?
获取ElementUI Table排序后的数据
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is
亲测!虚拟机VirtualBox安装MAC OS 10.12图文教程
华为手机app闪退重启界面清空log日志问题
android ndk开发之asm/page.h: not found
手机屏幕碎了怎么备份操作?
免ROOT实现模拟点击任意位置
新手必看修改DSDT教程
thinkpad t470p装黑苹果系统10.13.2