Android | 带你零代码实现安卓扫码功能

小序

  这是一篇纯新手教学,本人以前没有任何安卓开发经验(尴尬),本文也不涉及任何代码就可使用一个扫码demo,华为scankit真是新手的福音……html


背景介绍

  最近被导师要求作一个购物收费的app,毕设好难呀~ 网上找了半天全是zxing,可是扫码效果然是有点小垃圾,无奈只能继续寻寻觅觅……忽然发现网上有篇讲集成hms的文章,稍微借鉴了一下。因为在下是安卓小白,全篇没有一点代码,只是搬运一下华为网站的codelab,抱着忐忑的心情,居然能够一键运行……java


前期准备

  开发工具用的是android studioandroid

  用过android studio的人直接忽略,没用过的能够参考:https://developer.android.com/studioweb

相关的安装流程能够参考:https://www.cnblogs.com/xiadewang/p/7820377.html。json

  zxing和华为扫码服务对比app

  回到咱们的主题上—扫码,我在选择扫码库的时候,首先接触到的是google的开源库ZXing,也上手进行了实操,能够说集成过程仍是蛮简单的,可是针对我自己的业务场景和需求,识别率上仍是不够达标,自动对焦能力也不具有,不可以达到即开即用的要求,因此我就继续进行了调研,就了解到了华为的一个扫码服务,按照网站上的一些指引,20分钟就搞出来一个小demo,而后就真香,可以自定义UI界面,还可以自动对焦,对于一些有反光,有污损,形变,超远距离的场景都能很好地识别。特来分享,码字不易哦。最主要的是华为扫码服务是安卓全机型覆盖,太棒惹!~svg


开始搬运

  当前华为开发者网站上有一个叫作codelab的东西,连接我在下面分享了,亲测可用哦https://developer.huawei.com/consumer/cn/codelab/ScanKit-DefaultView/index.html#0函数

  1. 进来之后页面是这样的,一堆废话,密密麻麻的,能够略过。工具

在这里插入图片描述
  2. 说了使用的工具和版本,注意,android4.4,新下Android studio的朋友们能够略过,小哥哥们可能须要更新一下。开发工具

  3. 直接下载sample code,talk is cheap, show me the code。

在这里插入图片描述
  4. 打开android studio,在file下拉菜单中找到open,选择刚刚解压好的文件目录,在我这里是D:\codelab\Codelab_ScanKit_DefaultView_Full_Demo。而后跳出来这个玩意,直接ok过掉。
在这里插入图片描述

  5. 在左侧的菜单栏中若是上面是一个小机器人,能够下拉选择一下为project为了保持如下统一,若是有经验的能够忽略这步。

在这里插入图片描述
  6. 这里在app这个目录下会发现有个叫agcconnect.json的奇怪文件,这个文件是在华为官网上注册本身的帐号之后生成的,这个文件主要是为了起到云端校验的功能,由于扫码是纯端侧的服务,所以这里只集成扫码服务的话能够直接删除,不影响使用。

在这里插入图片描述

  7. 细细研究了一下文档发现scankit提供了两种sdk,一种是大的3.3mb,一种是小的0.7mb,大的小的在华为手机上效果同样,可是大的在非华为手机上也有很好的效果。因此果断选择大的sdk。

  首先须要进入app目录下的build.gradle。

在这里插入图片描述
  而后找到最后,将scan替换成scanplus。
在这里插入图片描述

  8.点击下图中标红的图标(云下有个箭头),静静等待一杯咖啡的时间,发现底下所有都是绿勾之后就大功告成了。

在这里插入图片描述

  9.我这里准备了一个华为手机,火烧眉毛地运行了一下。

在这里插入图片描述

  10.运行以后效果很棒,不管拉近拉远,反光,模糊,污损效果下都很出色,并且再也不须要本身写zxing操蛋的自动缩放了。完美!

在这里插入图片描述
  细细研究了一下代码,发现代码很简单,点击进入mainactivity以后就能看清楚这个app在干吗了。

在这里插入图片描述
  品了一下代码发现全部的东西都给封装好了,在回调函数中返回了识别的结果。稍微改吧一下就添加到个人工程里面了,大功告成,美滋滋。

if (requestCode == REQUEST_CODE_SCAN) {
    Object obj = data.getParcelableExtra(ScanUtil.RESULT);
    if (obj instanceof HmsScan) {
        if (!TextUtils.isEmpty(((HmsScan) obj).getOriginalValue())) {
            Toast.makeText(this, ((HmsScan) obj).getOriginalValue(), Toast.LENGTH_SHORT).show();
        }
        return;
    }
}

结语

  作完集成以后又回去看了一下开发者文档,内容不少,发现scankit的能力比想象中的还要强大,提供了默认扫码模式,自定义模式,多码识别模式,还能够生成码,详细的我会在接下来的文档中继续po出。


往期连接:Android | 教你如何使用HwCameraKit接入相机人像模式
内容来源:https://developer.huawei.com/consumer/cn/forum/topicview?fid=18&tid=0201211373637380068 原做者:Wisteria