分享一下华为的二维码\条形码识别(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写的。