分享一下华为的二维码\条形码识别(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 Modeif (requestCode == CAMERA_REQ_CODE) {ScanUtil.startScan(this, REQUEST_CODE_SCAN_ONE, new HmsScanAnalyzerOptions.Creator().create());}//Customized View Modeif (requestCode == DEFINED_CODE) {Intent intent = new Intent(this, DefinedActivity.class);this.startActivityForResult(intent, REQUEST_CODE_DEFINE);}//Bitmap Modeif (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 Modeif (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 Modeif (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)@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (resultCode != RESULT_OK || data == null) {return;}//Default Viewif (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写的。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
