分享一下华为的二维码条形码识别(Android)
Posted 清风伴佳人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分享一下华为的二维码条形码识别(Android)相关的知识,希望对你有一定的参考价值。
分享一下华为的二维码\\条形码识别(android)
效果的的话,如下视频
华为的scan二维码和条形码扫描
这是demo的效果,但是我们要的是导入自己的的项目,并且获得自己想要的结果。
先看怎么导入吧
implementation 'com.huawei.hms:scanplus:1.1.1.301'
然后从demo里把ScaningActivity 粘到自己的项目中,并且在manifest注册
使用呢就比较简单了
首先要获取权限
相机还有存储权限 这个很重要 不然扫描的框和条显示不出来。
然后获取完权限之后,启动ScaningActivity
private val REQUEST_CODE_SCAN_ONE = 0X01
ScanUtil.startScan(this, REQUEST_CODE_SCAN_ONE, HmsScanAnalyzerOptions.Creator().create())
然后设置数据回调
/**
* 扫码回调
*/
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)
super.onActivityResult(requestCode, resultCode, data)
if (resultCode != AppCompatActivity.RESULT_OK || data == null)
return
if (requestCode == REQUEST_CODE_SCAN_ONE)
val obj: HmsScan = data.getParcelableExtra(ScanUtil.RESULT)
if (obj != null)
Log.e("测试打印结果", obj.getOriginalValue())
这个样子就基本上把功能实现了,但是需要在注意一点。不要再在fragment里面启动,不然你在fragment里接收不到消息。
但是demo里也给出了其他的样式
//Default View Mode
if (requestCode == CAMERA_REQ_CODE)
ScanUtil.startScan(this, REQUEST_CODE_SCAN_ONE, new HmsScanAnalyzerOptions.Creator().create());
//Customized View Mode
if (requestCode == DEFINED_CODE)
Intent intent = new Intent(this, DefinedActivity.class);
this.startActivityForResult(intent, REQUEST_CODE_DEFINE);
//Bitmap Mode
if (requestCode == BITMAP_CODE)
Intent intent = new Intent(this, CommonActivity.class);
intent.putExtra(DECODE_MODE, BITMAP_CODE);
this.startActivityForResult(intent, REQUEST_CODE_SCAN_MULTI);
//Multiprocessor Synchronous Mode
if (requestCode == MULTIPROCESSOR_SYN_CODE)
Intent intent = new Intent(this, CommonActivity.class);
intent.putExtra(DECODE_MODE, MULTIPROCESSOR_SYN_CODE);
this.startActivityForResult(intent, REQUEST_CODE_SCAN_MULTI);
//Multiprocessor Asynchronous Mode
if (requestCode == MULTIPROCESSOR_ASYN_CODE)
Intent intent = new Intent(this, CommonActivity.class);
intent.putExtra(DECODE_MODE, MULTIPROCESSOR_ASYN_CODE);
this.startActivityForResult(intent, REQUEST_CODE_SCAN_MULTI);
但是注意因为每个样式的请求码不一样,所以回调也肯定不一样
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != RESULT_OK || data == null)
return;
//Default View
if (requestCode == REQUEST_CODE_SCAN_ONE)
HmsScan obj = data.getParcelableExtra(ScanUtil.RESULT);
if (obj != null)
Intent intent = new Intent(this, DisPlayActivity.class);
intent.putExtra(RESULT, obj);
startActivity(intent);
//MultiProcessor & Bitmap
else if (requestCode == REQUEST_CODE_SCAN_MULTI)
Parcelable[] obj = data.getParcelableArrayExtra(CommonActivity.SCAN_RESULT);
if (obj != null && obj.length > 0)
//Get one result.
if (obj.length == 1)
if (obj[0] != null && !TextUtils.isEmpty(((HmsScan) obj[0]).getOriginalValue()))
Intent intent = new Intent(this, DisPlayActivity.class);
intent.putExtra(RESULT, obj[0]);
startActivity(intent);
else
Intent intent = new Intent(this, DisPlayMulActivity.class);
intent.putExtra(RESULT, obj);
startActivity(intent);
//Customized View
else if (requestCode == REQUEST_CODE_DEFINE)
HmsScan obj = data.getParcelableExtra(DefinedActivity.SCAN_RESULT);
if (obj != null)
Intent intent = new Intent(this, DisPlayActivity.class);
intent.putExtra(RESULT, obj);
startActivity(intent);
最好说一下,demo是Java写的 ,本人给出的示例代码是kotlin写的。
以上是关于分享一下华为的二维码条形码识别(Android)的主要内容,如果未能解决你的问题,请参考以下文章
zbar 扫描快,zxing 可以生成和识别本地,So,我就把他们结合在了一起,这样 Android 二维码(条形码)功能就更便捷了