关于android:扫一扫原来这么简单

7次阅读

共计 3262 个字符,预计需要花费 9 分钟才能阅读完成。

二维码辨认技术已广泛应用在挪动领取、实用工具、电商购物、社交通信等场景。然而,在理论生存中,二维码容易遇到距离远、暗光、强光、污损、含糊和大角度歪斜等简单场景,导致辨认艰难,扫码体验差。华为 HMS Core 对立扫码服务(Scan Kit)为开发者们的 APP 带来一站式扫码解决方案,并且领有高识别率和疾速辨认等特点。

间隔太远、码图过小?

在停车场扫码缴费、上课扫码签到、广告牌宣传等理论生存场景中,二维码的尺寸不一,个别的扫码性能需手动调节手机相机框与二维码的间隔直到适合的扫码大小,实属不便。对立扫码服务基于自研的深度学习算法模型,遇到远距离场景、码图过小、甚至肉眼无奈分辨的状况,反对自动检测放大,智能辨认。

多角度、光线不佳、含糊等简单场景无奈辨认?

餐桌、共享单车、充电桩等设施上的二维码,易受环境或人为影响,导致污损、含糊、反光,无奈清晰展现,造成辨认艰难。对立扫码服务基于多项计算机视觉技术,能够大幅晋升简单场景识别率,对立扫码服务能够自动检测及旋转纠正,可能在辨认任意角度的同时保障准确率。

单个扫码效率低?

在录入商品信息、快递信息等须要频繁扫码的场景中,个别的扫码性能辨认胜利后会主动跳转,操作不便。对立扫码服务为您带来间断扫码性能,对相机内间断呈现的二维码辨认检测,防止辨认胜利主动跳转的问题。同时,多码识别模式下,对立扫码服务最多可同时辨认不限品种的 5 个码,大幅晋升工作效率。

另外,HMS Core 对立扫码服务为助力开发者们构建晦涩的扫码体验,带来更加欠缺的性能:

① 反对辨认 / 生成 13 种支流码格局;

② 反对自定义扫码界面;

③ 反对剖析 12 个场景的码内容,提取结构化数据;

④ 提供内存 1.1M / 3.3M 两种 SDK 及 4 种不同类型的调用形式,安卓版本起码 5 行代码即可疾速接入。

上面是接入 HMS Core 对立扫码服务的开发步骤,以 Default View Mode 为例,只需简略的集成就可为利用构建扫码能力。

开发步骤

1. 开发筹备

具体筹备步骤可参考华为开发者联盟官网。

2. 集成筹备

Default View Mode 提供相机扫码和导入图片扫码两个性能,提供残缺的 Activity,不须要您开发扫码界面。

留神:应用此种模式请确保您的利用没有敞开硬件加速,即“hardwareAccelerated”为“true”。否则在个别机型可能会呈现黑屏问题。

3. 业务流程

应用 Default View Mode 的次要业务流程如下:

1) 用户关上 App 发动扫码申请。

2) 校验是否有相机权限。

3) 权限验证通过后,调用 HMS Core SDK 的 startScan 扫码接口,启动扫码界面。若须要满足最小权限和场景化触发要求,文件读取权限在用户点击后触发场景,须要设置谬误监听,检测到无文件读取权限,Scan Kit 报错退出 Default View。

4) 判断扫码页面启动状态。

5) HMS Core SDK 回调利用的“onActivityResult”接口。

6) 依据扫码状态 RESULT_CODE 获取扫码后果:若 SUCCESS 返回后果给用户;若后果为 ERROR_NO_READ_PERMISSION,须要利用被动申请文件读取权限,从新进入 Default View。

7) App 封装扫码后果返回给用户。

  1. 开发步骤

1)(可选)依据理论需要创立扫码选项参数。

Scan Kit 默认反对 13 种码制式,您也能够指定 Scan Kit 只扫描特定的码制式以进步扫码速度。例如,当仅须要检测 QR 码和 DataMatrix 码时,请依照以下示例构建 HmsScanAnalyzerOptions 对象。如果不限度检测码格局,您能够不创立 HmsScanAnalyzerOptions 对象。“1”为您设置的扫码题目款式参数,对应 setViewType 办法中的“var1”参数。

//“QRCODE_SCAN_TYPE”和“DATAMATRIX_SCAN_TYPE”示意只扫描 QR 和 DataMatrix 的码,setViewType 设置扫码题目,0 示意设置扫码题目为”扫描二维码 / 条码“,1 示意设置扫码题目为”扫描二维码“,默认为 0;setErrorCheck 设置谬误监听,true 示意监听谬误并退出扫码页面,false 示意不上报谬误,仅查看到辨认后果后退出扫码页面,默认为 false

HmsScanAnalyzerOptions options = new HmsScanAnalyzerOptions.Creator().setHmsScanTypes(HmsScan.QRCODE_SCAN_TYPE,HmsScan.DATAMATRIX_SCAN_TYPE).setViewType(1).setErrorCheck(true).create();

2) 调用 ScanUtil 的静态方法 startScan 启动 Default View 扫码页面。用户能够应用相机扫码,也能够通过该页面的“导入图片”按钮检测图片中的码。

“REQUEST_CODE_SCAN_ONE”为您设置的申请码参数,对应“onActivityResult”办法中的“requestCode”参数,用于判断“onActivityResult”调用是否来自 Scan Kit 扫码后果回调。若“requestCode”参数等于您设置的申请码参数,则示意本次“onActivityResult”是 Scan Kit 的扫码后果回调。

如果您没有指定只检测特定的码制式,此处的 options 能够置为“null”,示意默认检测 Scan Kit 反对的码制式。

ScanUtil.startScan(this, REQUEST_CODE_SCAN_ONE, options);

3) 实现回调接口接管扫码后果,相机扫码和导入图片扫码均通过该接口返回。

 调用 Activity 的“onActivityResult”办法获取 Intent 参数,扫描后果对象 HmsScan 封装在其中。如何获取 Intent 参数请参见 [RESULT](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-References/scan-scanutil4-0000001050167699#section13418152610215?ha_source=hms1)。

若“requestCode”等于步骤 2 中定义的“REQUEST_CODE_SCAN_ONE”申请码参数,则示意本次接管的 Intent 是 Scan Kit 返回的后果。

通过 Intent 中的 RESULT_CODE 获取扫码状态。

通过 Intent 中的 RESULT 获取扫码后果 HmsScan,其中蕴含的信息参见码值解析。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);
    if (resultCode != RESULT_OK || data == null) {return;}
    if (requestCode == REQUEST_CODE_SCAN_ONE) {
        // 导入图片扫描返回后果
        int errorCode = data.getIntExtra(ScanUtil.RESULT_CODE, ScanUtil.SUCCESS);
        if (errorCode == ScanUtil.SUCCESS) {Object obj = data.getParcelableExtra(ScanUtil.RESULT);
        if (obj != null) {
                // 展现扫码后果
        ...
            }
    }
        if (errorCode == ScanUtil.ERROR_NO_READ_PERMISSION) {
            // 无文件权限,申请文件权限
        ...
        }
    }
}

理解更多详情 >>

拜访华为开发者联盟官网
获取开发领导文档
华为挪动服务开源仓库地址:GitHub、Gitee

关注咱们,第一工夫理解 HMS Core 最新技术资讯~

正文完
 0