哈利波肖 發表於 2020-5-6 10:23:00

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

<p></p><div class="toc"><div class="toc-container-header">目录</div><ul><li>小序</li><li>背景介绍</li><li>前期准备</li><li>开始搬运</li><li>结语</li></ul></div><p></p>
<h1 id="小序">小序</h1>
<p>  这是一篇纯新手教学,本人之前没有任何安卓开发经验(尴尬),本文也不涉及任何代码就可以使用一个扫码demo,华为scankit真是新手的福音……</p>
<hr>
<h1 id="背景介绍">背景介绍</h1>
<p>  最近被导师要求做一个购物收费的app,毕设好难呀~ 网上找了半天全是zxing,但是扫码效果真是有点小垃圾,无奈只能继续寻寻觅觅……突然发现网上有篇讲集成hms的文章,稍微借鉴了一下。由于在下是安卓小白,全篇没有一点代码,只是搬运一下华为网站的codelab,抱着忐忑的心情,竟然可以一键运行……</p>
<hr>
<h1 id="前期准备">前期准备</h1>
<p>  开发工具用的是android studio</p>
<p>  用过android studio的人直接忽略,没用过的可以参考:https://developer.android.com/studio</p>
<p>相关的安装流程可以参考:https://www.cnblogs.com/xiadewang/p/7820377.html。</p>
<p>  zxing和华为扫码服务对比</p>
<p>  回到我们的主题上—扫码,我在选择扫码库的时候,首先接触到的是google的开源库ZXing,也上手进行了实操,可以说集成过程还是蛮简单的,但是针对我本身的业务场景和需求,识别率上还是不够达标,自动对焦能力也不具备,不能够达到即开即用的要求,所以我就继续进行了调研,就了解到了华为的一个扫码服务,按照网站上的一些指引,20分钟就搞出来一个小demo,然后就真香,能够自定义UI界面,还能够自动对焦,对于一些有反光,有污损,形变,超远距离的场景都能很好地识别。特来分享,码字不易哦。最主要的是华为扫码服务是安卓全机型覆盖,太棒惹!~</p>
<hr>
<h1 id="开始搬运">开始搬运</h1>
<p>  当前华为开发者网站上有一个叫做codelab的东西,链接我在下面分享了,亲测可用哦https://developer.huawei.com/consumer/cn/codelab/ScanKit-DefaultView/index.html#0</p>
<p>  1. 进来以后页面是这样的,一堆废话,密密麻麻的,可以略过。</p>
<p><img src="https://img-blog.csdnimg.cn/20200506091905183.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDcwODI0MA==,size_16,color_FFFFFF,t_70#pic_center"><br>
  2. 说了使用的工具和版本,注意,android4.4,新下Android studio的朋友们可以略过,小哥哥们可能需要更新一下。</p>
<p>  3. 直接下载sample code,talk is cheap, show me the code。</p>
<p><img src="https://img-blog.csdnimg.cn/20200506094018604.png#pic_center"><br>
  4. 打开android studio,在file下拉菜单中找到open,选择刚刚解压好的文件目录,在我这里是D:\codelab\Codelab_ScanKit_DefaultView_Full_Demo。然后跳出来这个玩意,直接ok过掉。<br>
<img src="https://img-blog.csdnimg.cn/202005060940387.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDcwODI0MA==,size_16,color_FFFFFF,t_70#pic_center"></p>
<p>  5. 在左侧的菜单栏中如果上面是一个小机器人,可以下拉选择一下为project为了保持以下统一,如果有经验的可以忽略这步。</p>
<p><img src="https://img-blog.csdnimg.cn/20200506094209223.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDcwODI0MA==,size_16,color_FFFFFF,t_70#pic_center"><br>
  6. 这里在app这个目录下会发现有个叫agcconnect.json的奇怪文件,这个文件是在华为官网上注册自己的账号以后生成的,这个文件主要是为了起到云端校验的功能,因为扫码是纯端侧的服务,因此这里只集成扫码服务的话可以直接删除,不影响使用。</p>
<p><img src="https://img-blog.csdnimg.cn/2020050609424341.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDcwODI0MA==,size_16,color_FFFFFF,t_70#pic_center"></p>
<p>  7. 细细研究了一下文档发现scankit提供了两种sdk,一种是大的3.3mb,一种是小的0.7mb,大的小的在华为手机上效果一样,但是大的在非华为手机上也有很好的效果。所以果断选择大的sdk。</p>
<p>  首先需要进入app目录下的build.gradle。</p>
<p><img src="https://img-blog.csdnimg.cn/20200506094307688.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDcwODI0MA==,size_16,color_FFFFFF,t_70#pic_center"><br>
  然后找到最后,将scan替换成scanplus。<br>
<img src="https://img-blog.csdnimg.cn/20200506094341814.png#pic_center"></p>
<p>  8.点击下图中标红的图标(云下有个箭头),静静等待一杯咖啡的时间,发现底下全部都是绿勾以后就大功告成了。</p>
<p><img src="https://img-blog.csdnimg.cn/20200506094504516.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDcwODI0MA==,size_16,color_FFFFFF,t_70#pic_center"></p>
<p>  9.我这里准备了一个华为手机,迫不及待地运行了一下。</p>
<p><img src="https://img-blog.csdnimg.cn/20200506094556151.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDcwODI0MA==,size_16,color_FFFFFF,t_70#pic_center"></p>
<p>  10.运行之后效果很棒,无论拉近拉远,反光,模糊,污损效果下都很出色,而且不再需要自己写zxing操蛋的自动缩放了。完美!</p>
<p><img src="https://img-blog.csdnimg.cn/20200506094618548.png#pic_center"><br>
  细细研究了一下代码,发现代码很简单,点击进入mainactivity之后就能看清楚这个app在干嘛了。</p>
<p><img src="https://img-blog.csdnimg.cn/20200506094649789.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDcwODI0MA==,size_16,color_FFFFFF,t_70#pic_center"><br>
  品了一下代码发现所有的东西都给封装好了,在回调函数中返回了识别的结果。稍微改吧一下就添加到我的工程里面了,大功告成,美滋滋。</p>
<pre><code class="language-java">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;
    }
}
</code></pre>
<hr>
<h1 id="结语">结语</h1>
<p>  做完集成之后又回去看了一下开发者文档,内容很多,发现scankit的能力比想象中的还要强大,提供了默认扫码模式,自定义模式,多码识别模式,还可以生成码,详细的我会在接下来的文档中继续po出。</p>
<hr>
<p>往期链接:Android | 教你如何使用HwCameraKit接入相机人像模式<br>
内容来源:https://developer.huawei.com/consumer/cn/forum/topicview?fid=18&amp;tid=0201211373637380068<br>
原作者:Wisteria</p><br><br>
来源:https://www.cnblogs.com/developer-huawei/p/12834798.html
頁: [1]
查看完整版本: Android | 带你零代码实现安卓扫码功能