当前位置:网站首页>HMS Core 统一扫码服务
HMS Core 统一扫码服务
2022-07-04 19:44:00 【Just_Paranoid】
统一扫码服务(Scan Kit)提供便捷的条形码和二维码扫描、解析、生成能力,帮助您快速构建应用内的扫码功能。得益于华为在计算机视觉领域能力的积累,Scan Kit可以实现远距离码或小型码的检测和自动放大,同时针对常见复杂扫码场景(如反光、暗光、污损、模糊、柱面)做了针对性识别优化,提升扫码成功率与用户体验。
Scan Kit支持Android和iOS系统集成。其中,Android系统集成Scan Kit后支持横屏扫码能力。
指南:
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/service-introduction-0000001050041994
codelab:
https://developer.huawei.com/consumer/cn/codelabsPortal/carddetails/ScanKit
构建扫码功能
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/android-overview-0000001050282308
gradle添加编译依赖
implementation 'com.huawei.hms:scan:2.6.0.300'
自定义扫码
Customized View支持开发者自定义扫码界面,扫码过程和相机控制将由Scan Kit完成。
//设置支持识别的码类型并初始化RemoteView,设定页面元素的操作
//将RemoteView加载到Activity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_defined);
// 绑定相机预览布局。
frameLayout = findViewById(R.id.rim);
// 设置扫码识别区域,您可以按照需求调整参数。
DisplayMetrics dm = getResources().getDisplayMetrics();
float density = dm.density;
mScreenWidth = getResources().getDisplayMetrics().widthPixels;
mScreenHeight = getResources().getDisplayMetrics().heightPixels;
// 当前Demo扫码框的宽高是300dp。
final int SCAN_FRAME_SIZE = 300;
int scanFrameSize = (int) (SCAN_FRAME_SIZE * density);
Rect rect = new Rect();
rect.left = mScreenWidth / 2 - scanFrameSize / 2;
rect.right = mScreenWidth / 2 + scanFrameSize / 2;
rect.top = mScreenHeight / 2 - scanFrameSize / 2;
rect.bottom = mScreenHeight / 2 + scanFrameSize / 2;
// 初始化RemoteView,并通过如下方法设置参数:setContext()(必选)传入context、setBoundingBox()设置扫描区域、setFormat()设置识别码制式,设置完毕调用build()方法完成创建。通过setContinuouslyScan(可选)方法设置非连续扫码模式。
remoteView = new RemoteView.Builder().setContext(this).setBoundingBox(rect).setContinuouslyScan(false).setFormat(HmsScan.QRCODE_SCAN_TYPE, HmsScan.DATAMATRIX_SCAN_TYPE).build();
// 将自定义view加载到activity的frameLayout中。
remoteView.onCreate(savedInstanceState);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
frameLayout.addView(remoteView, params);
}
//对RemoteView设置结果回调监听,获取扫码结果对象HmsScan,其中包含的信息参见码值解析
@Override
protected void onCreate(Bundle savedInstanceState) {
…
// 识别结果回调事件订阅
remoteView.setOnResultCallback(new OnResultCallback() {
@Override
public void onResult(HmsScan[] result) {
// 获取到扫码结果HmsScan
showResult(result);
}
});
}
//开发者在扫码成功后,如不想结束当前“Activity”并继续进行其他操作,可以调用暂停扫码接口。
remoteView.pauseContinuouslyScan();
//需要从暂停扫码状态恢复扫码,可以调用恢复扫码接口,恢复当前“Activity”接收扫码结果。
remoteView.resumeContinuouslyScan();
//设置非连续扫码模式。
//通过setContinuouslyScan方法设置,默认为true,连续扫码模式,此时扫码结果会连续返回;设置为false,非连续扫码模式,此时相同的码值只会返回一次。
// setContinuouslyScan设置为false,非连续扫码模式。
remoteView = new RemoteView.Builder().setContext(this).setContinuouslyScan(false).build();
//设置扫码成功后是否返回原图。
//通过enableReturnBitmap方法设置扫码成功后返回原图,默认不返回。可以通过HmsScan对象的getOriginalBitmap获取结果。
remoteView = new RemoteView.Builder().setContext(this).enableReturnBitmap().build();
图片扫码
//1.获取图片,将图片转化为Bitmap。
// data是Intent类型,data.getData是待扫描的条码图片Uri。
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), data.getData());
//2.初始化HmsScanAnalyzerOptions,设置支持识别的码制式和设置Bitmap模式为图片扫码模式。
//开发者可以通过如下方式设置可选参数。
//setHmsScanTypes():设置码制式,默认识别Scan Kit支持的码制式,指定扫码特定码制式,可以提高扫码速度。
//setPhotoMode(true):设置Bitmap模式,默认为相机扫码模式,此处设置为图片扫码模式,值为true。
// “QRCODE_SCAN_TYPE”和“DATAMATRIX_SCAN_TYPE”表示只扫描QR和Data Matrix的码
HmsScanAnalyzerOptions options = new HmsScanAnalyzerOptions.Creator().setHmsScanTypes(HmsScan.QRCODE_SCAN_TYPE, HmsScan.DATAMATRIX_SCAN_TYPE).setPhotoMode(true).create();
//3.调用ScanUtil的静态方法decodeWithBitmap发起扫码请求并获取扫码结果对象HmsScan,其中包含的信息请参见码值解析。
//如果开发者不需要指定只检测特定的码制式,此处的“options”可以置为“null”。
HmsScan[] hmsScans = ScanUtil.decodeWithBitmap(BitmapActivity.this, bitmap, options);
// 处理扫码结果
if (hmsScans != null && hmsScans.length > 0) {
// 展示扫码结果
showResult(hmsScans);
}
边栏推荐
- Stack: how to realize the judgment of valid brackets?
- [today in history] July 4: the first e-book came out; The inventor of magnetic stripe card was born; Palm computer pioneer was born
- Common verification rules of form components -1 (continuously updating ~)
- RFID仓库管理系统解决方案有哪些功能模块
- Flet教程之 05 OutlinedButton基础入门(教程含源码)
- BFC interview Brief
- Après l'insertion de l'image dans le mot, il y a une ligne vide au - dessus de l'image, et la disposition est désordonnée après la suppression
- 测试员的算法面试题-找众数
- What if the WiFi of win11 system always drops? Solution of WiFi total drop in win11 system
- What if the computer page cannot be full screen? The solution of win11 page cannot be full screen
猜你喜欢
【服务器数据恢复】某品牌服务器存储raid5数据恢复案例
电脑共享打印机拒绝访问要怎么办
AP8022开关电源小家电ACDC芯片离线式开关电源IC
Win11系统wifi总掉线怎么办?Win11系统wifi总掉线的解决方法
科普达人丨一文看懂阿里云的秘密武器“神龙架构”
FS4061A升压8.4V充电IC芯片和FS4061B升压12.6V充电IC芯片规格书datasheet
Some suggestions for interface design
Flet教程之 04 FilledTonalButton基础入门(教程含源码)
Flet tutorial 06 basic introduction to textbutton (tutorial includes source code)
[in-depth learning] review pytoch's 19 loss functions
随机推荐
【深度学习】一文看尽Pytorch之十九种损失函数
Stack: how to realize the judgment of valid brackets?
hash 表的概念及应用
So this is the BGP agreement
Go notes (3) usage of go language FMT package
What if the win11 shared file cannot be opened? The solution of win11 shared file cannot be opened
Sword finger offer II 80-100 (continuous update)
什么是区块哈希竞猜游戏系统开发?哈希竞猜游戏系统开发(案例成熟)
BFC interview Brief
Practice examples to understand JS strong cache negotiation cache
哈希表、哈希函数、布隆过滤器、一致性哈希
针对深度学习的“失忆症”,科学家提出基于相似性加权交错学习,登上PNAS
LeetCode 871. Minimum refueling times
Advantages of semantic tags and block level inline elements
Understand Alibaba cloud's secret weapon "dragon architecture" in the article "science popularization talent"
最长的可整合子数组的长度
What ppt writing skills does the classic "pyramid principle" teach us?
【申博攻略】六.如何联系心仪的博导
Fleet tutorial 08 introduction to AppBar toolbar Basics (tutorial includes source code)
E-week finance | Q1 the number of active people in the insurance industry was 86.8867 million, and the licenses of 19 Payment institutions were cancelled