HMS Core 统一扫码服务

统一扫码服务(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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值