欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

二维码距离远、反光、遮挡,怎么办?不用担心,华为HMS Scan kit 统统帮您搞定

程序员文章站 2022-03-04 23:32:16
前言  前几天,小编外出shopping完,美滋滋的准备开车回家,结果被车库的支付二维码拦住了,距离太远,一直无法识别,后面的车主还使劲催促,搞得我很烦躁啊。回家后和朋友吐槽,没得到安慰不说,还强行加入了一个关于二维码反光、遮挡的大型吐槽现场。  扫码功能不是已经使用很久了吗?怎么还有这么多问题?  后来无意中在外网上看到一篇关于华为 HMS Scan kit的介绍,小编顺着文章发现在华为开发者联盟网站上可以下载APK体验,赶紧试了试效果。华为 HMS Scan kit功能果然强大,轻松解决远距离、反...

前言

  前几天,小编外出shopping完,美滋滋的准备开车回家,结果被车库的支付二维码拦住了,距离太远,一直无法识别,后面的车主还使劲催促,搞得我很烦躁啊。回家后和朋友吐槽,没得到安慰不说,还强行加入了一个关于二维码反光、遮挡的大型吐槽现场。

  扫码功能不是已经使用很久了吗?怎么还有这么多问题?

  后来无意中在外网上看到一篇关于华为 HMS Scan kit的介绍,小编顺着文章发现在华为开发者联盟网站上可以下载APK体验,赶紧试了试效果。华为 HMS Scan kit功能果然强大,轻松解决远距离、反光、损坏、遮挡等复杂扫码场景。

效果展示

远距离扫码
二维码距离远、反光、遮挡,怎么办?不用担心,华为HMS Scan kit 统统帮您搞定
反光扫码
二维码距离远、反光、遮挡,怎么办?不用担心,华为HMS Scan kit 统统帮您搞定
损坏、遮挡扫码
二维码距离远、反光、遮挡,怎么办?不用担心,华为HMS Scan kit 统统帮您搞定

  小编发现,华为HMS Scan kit还可以实现任意角度扫码、曲面扫码、同时识别多个码等,支持13种全球主流码,完全可以满足生活、工作等各类场景使用需求。

  大家可以戳下方链接,亲身感受下:https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Examples-V5/android-sample-code-0000001050734383-V5

  重点来了,这么好用、强大的扫码服务功能,怎么获得呢?

  不要着急,小编已经帮大家把开发流程搬过来了,快来集成吧!

开发实战

1 配置AppGallery Connect

  在开发应用前,需要在AppGallery Connect中配置相关信息。包括:

  • 注册成为开发者。

  • 创建应用。

  这里就不多介绍了,大家可以参考官网操作:
https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-get-started#createproject

2 集成HMS Core SDK

2.1 添加当前应用的AppGallery Connect配置文件

  如果在AppGallery Connect中开通了相关服务则需要将“agconnect-services.json”文件添加到您的App中。

  1、登录AppGallery Connect网站,点击“我的项目”。

  2、在项目列表中找到您的项目,在项目中点击需要集成HMS Core SDK的应用。

  3、在“项目设置 > 常规”页面的“应用”区域,点击“agconnect-services.json”下载配置文件。

  4、将“agconnect-services.json”文件拷贝到应用级根目录下。
二维码距离远、反光、遮挡,怎么办?不用担心,华为HMS Scan kit 统统帮您搞定

2.2 配置HMS Core SDK的Maven仓地址
  1、打开Android Studio项目级“build.gradle”文件。
二维码距离远、反光、遮挡,怎么办?不用担心,华为HMS Scan kit 统统帮您搞定

  2、添加HUAWEI agcp插件以及Maven代码库。

  • 在“allprojects > repositories”中配置HMS Core SDK的Maven仓地址。
  • 在“buildscript > repositories”中配置HMS Core SDK的Maven仓地址。
  • 如果App中添加了“agconnect-services.json”文件则需要在“buildscript > dependencies”中增加agcp配置。
buildscript {
    repositories {
        google()
        jcenter()
        maven {url 'https://developer.huawei.com/repo/'}
    }
    dependencies {
        ...
        classpath 'com.huawei.agconnect:agcp:1.3.1.300'
    }
}
  
allprojects {
    repositories {
        google()
        jcenter()
        maven {url 'https://developer.huawei.com/repo/'}
    }
}

说明:Maven仓地址无法直接在浏览器中打开访问,只能在IDE中配置。如需添加多个Maven代码库,请将华为公司的Maven仓地址配置在最后。
2.3 添加编译依赖
1、打开Android Studio项目级“build.gradle”文件。
二维码距离远、反光、遮挡,怎么办?不用担心,华为HMS Scan kit 统统帮您搞定

2、引用SDK。
华为Scan Kit提供两种SDK,普通版和plus版。plus版在非华为手机上效果好点儿但SDK略大。大家可以根据需求选择合适的SDK,版本填写实际的SDK版本号就可以了。

例如,使用Scan Kit SDK,在“dependencies”中添加如下编译依赖,{version}需要替换为SDK当前版本:implementation ‘com.huawei.hms:scan:1.2.2.300’。

dependencies{
  implementation 'com.huawei.hms:scan:1.2.2.300'
 }

3、在文件头apply plugin: 'com.android.application’下一行添加如下配置。
2.4 同步工程
  在完成以上的配置后,点击工具栏中的gradle同步图标,完成“build.gradle”文件的同步,将相关依赖下载到本地。
二维码距离远、反光、遮挡,怎么办?不用担心,华为HMS Scan kit 统统帮您搞定

3 添加权限

1、在调用Scan kit 时,开发者需要先在Manifest中指定相应的权限。
  构建相机扫码功能,需要申请“CAMERA”(相机权限);构建导入图片扫码功能,需要申请“READ_EXTERNAL_STORAGE”(读文件权限)。

<!--相机权限-->
<uses-permission android:name="android.permission.CAMERA" />
<!--读文件权限-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!--使用特性-->
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

2、在Manifest中指定权限后,还需要在代码中动态申请一下权限。

//CAMERA_REQ_CODE为用户自定义,用于接收权限校验结果 
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE}, CAMERA_REQ_CODE);

3、校验是否开启相应的权限,决定是否继续扫码。

//实现“onRequestPermissionsResult”函数接收校验权限结果
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    //判断“requestCode”是否为申请权限时设置请求码CAMERA_REQ_CODE,然后校验权限开启状态
    if (requestCode == CAMERA_REQ_CODE && grantResults.length == 2 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
        //调用扫码接口,构建扫码能力,需开发者实现
        ...
    }
}

4 应用开发

  华为HMS Scan kit提供Default view mode、Customized view mode、Bitmap mode 、Multi Processor mode 4种调用方式,开发者可以根据需求构建扫码功能。

  小编这里介绍下customized view mode开发过程。
1、自定义扫码页面元素。
(1)自定义标题
定义文本信息为“title”变量。

<TextView 
    android:layout_marginStart="10sp" 
    android:layout_toEndOf="@+id/back_img" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center_vertical" 
    android:text="@string/title" 
    android:textAllCaps="false" 
    android:textColor="#FFFFFF" 
    android:textSize="20sp" 
    android:textStyle="bold" />

(2)自定义返回按钮

定义id为“back_img”的页面视图,并绑定点击返回操作。

(3)自定义闪光灯按钮

定义闪光灯按钮的页面视图,并绑定开启关闭操作。

(4)自定义扫码界面

绘制扫码框。

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <ImageView 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:layout_centerInParent="true" 
        android:layout_centerHorizontal="true" 
        android:background="#FF000000" 
        android:alpha="0.1" /> 
    <TextView 
        android:layout_marginTop="225dp" 
        android:layout_centerHorizontal="true" 
        android:text="@string/scan_tip" 
        android:textAllCaps="false" 
        android:textColor="#FFFFFF" 
        android:textSize="15sp" 
        android:textStyle="bold" 
        android:layout_height="20dp" 
        android:layout_width="220dp" /> 
    <!-- 设置扫码框--> 
    <ImageView 
        android:layout_width="300dp" 
        android:layout_height="300dp" 
        android:layout_centerInParent="true" 
        android:layout_centerHorizontal="true" 
        android:background="@drawable/cloors" /> 
</RelativeLayout>

2、通过Customized view实现相机扫码功能。
(1)创建Remote View,并加载到Activity布局。
(2)对Remote View设置结果回调监听,获取扫码结果对象HMS Scan。

@Override
protected void onCreate(Bundle savedInstanceState) {//识别结果回调事件订阅 
    remoteView.setOnResultCallback(new OnResultCallback() { 
        @Override 
        public void onResult(HmsScan[] result) { 
            //获取到扫码结果HmsScan
            showResult(result); 
        } 
    });
}

结束语

  华为Scan kit依托华为计算机视觉领域强大能力,支持远距离码、小型码的检测和自动放大,有效处理反光、遮挡、污损、模糊等复杂扫码场景,支持Android和iOS系统集成,帮助开发者快速构建关联服务,提升用户扫码体验和成功率。

  Scan Kit的示例代码已在Github开源:https://github.com/HMS-Core/hms-scan-demo

更详细的开发指南请参考华为开发者联盟官网

https://developer.huawei.com/consumer/cn/hms/huawei-scankit
欲了解更多详情,请参阅:

华为开发者联盟官网:https://developer.huawei.com/consumer/cn/hms

获取开发指导文档:https://developer.huawei.com/consumer/cn/doc/development

参与开发者讨论请到Reddit社区:https://www.reddit.com/r/HMSCore/

下载demo和示例代码请到Github:https://github.com/HMS-Core

解决集成问题请到Stack Overflow:https://*.com/questions/tagged/huawei-mobile-services?tab=Newest


原文链接:https://developer.huawei.com/consumer/cn/forum/topicview?tid=0202356605936130805&fid=18
作者:say hi

本文地址:https://blog.csdn.net/weixin_44708240/article/details/108848368

相关标签: android