热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

超简单Android集成华为HMSScankit扫码SDK实现扫一扫二维码

这篇文章主要介绍了超简单Android集成华为HMSScankit扫码SDK实现扫一扫二维码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

最近要做一个停车场扫码收费的app,在网上搜了一圈,首先接触到了ZXing,上手试了下,集成过程不复杂,但是感觉效果欠佳,比如距离稍微远点儿就扫不出来了,另外角度对的不好,反光或者光线比较暗的时候,成功率也比较低,集成好给我们老大看了下,感觉不是很满意。最近偶尔看到了华为一个发布会里面有介绍扫码功能,稍微研究了下,居然是一款免费扫码神器,官方称之为Scan Kit,号称还同时支持Android和iOS,半信半疑上手搞了一把发现效果还真不错!测了下发现对于一些有反光,污损,形变,超远距离的场景都能很好地识别!

今天简单总结了下,分享给大家,码字不易,也算是疫情期间,给大家的一点小小福利。

官网的Demo和Sample代码体验

官网有Demo可以直接下下来体验,还有sample代码样例,小伙伴们可以直接到官网下载Demo或者示例代码体验下:华为官网的Demo和示例代码,示例代码下下来就可以运行。

我自己也结合下面的讲解写了个简易的sample,各位看官也可以下下来参考。
简易扫码sample示例

1 开发前准备

1.1 android studio 安装

这里就不啰嗦了,到官网下载和安装:Android studio官网下载链接,Android studio安装流程参考链接

1.2 在项目级gradle里添加华为maven仓


增量添加如下maven地址:

buildscript {
  repositories {    
    maven {url 'http://developer.huawei.com/repo/'}
  }  
}
allprojects {
  repositories {    
    maven { url 'http://developer.huawei.com/repo/'}
  }
}

1.3 在应用级的build.gradle里面加上SDK依赖


增量添加SDK依赖,SDK他们有两种版本,plus和普通版,plus效果好点儿但是包稍微大一点儿,这个地方我选了plus版本,小伙伴们可以根据自己需要自行选择,版本号填他们最新的版本就好。

dependencies{ 
 implementation 'com.huawei.hms:scanplus:1.1.1.301' 
 }

1.4 加一下混淆配置


复制粘贴华为官网上给的混淆代码就可以了

-ignorewarnings 
-keepattributes *Annotation* 
-keepattributes Exceptions 
-keepattributes InnerClasses 
-keepattributes Signature 
-keepattributes SourceFile,LineNumberTable 
-keep class com.hianalytics.android.**{*;} 
-keep class com.huawei.**{*;}

1.5 Manifest申请静态权限和扫码页面声明:


申请静态权限和使用特性

 
 
 
 
 
 

在application标签内添加对扫码页面的声明

 

2 代码开发

2.1 动态申请权限

在启动扫码Activity的地方添加动态权限申请。

public void loadScanKitBtnClick(View view) {
  requestPermission(CAMERA_REQ_CODE, DECODE);
}

private void requestPermission(int requestCode, int mode) {
  ActivityCompat.requestPermissions(
      this,
      new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE},
      requestCode);
}

2.2 在权限申请回调中启动扫码界面

扫码格式通过setHmsScanTypes指定为QR码,小伙伴们如果需要支持其它码可以自己指定。

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
  if (permissiOns== null || grantResults == null) {
    return;
  }
  if (grantResults.length <2 || grantResults[0] != PackageManager.PERMISSION_GRANTED || grantResults[1] != PackageManager.PERMISSION_GRANTED) {
    return;
  }
  if (requestCode == CAMERA_REQ_CODE) {
    ScanUtil.startScan(this, REQUEST_CODE_SCAN_ONE, new HmsScanAnalyzerOptions.Creator().setHmsScanTypes(HmsScan.QRCODE_SCAN_TYPE).create());
  }
}

2.3 在activity回调里面获取码结果

@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) {
    HmsScan obj = data.getParcelableExtra(ScanUtil.RESULT);
    if (obj != null) {
      this.textView.setText(obj.originalValue);
    }
  }
}

结后语

整个代码开发过程就结束了,是不是超简单,给大家看下效果:
效果非常赞,支持自动缩放,两米开外瞬间就识别成功了!

附官方开发指南

华为扫码服务开发指南

到此这篇关于超简单Android集成华为HMS Scankit 扫码SDK实现扫一扫二维码的文章就介绍到这了,更多相关Android集成华为HMS Scankit 扫码内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • BeautifulSoup4 是一个功能强大的HTML和XML解析库,它能够帮助开发者轻松地从网页中提取信息。本文将介绍BeautifulSoup4的基本功能、安装方法、与其他解析工具的对比以及简单的使用示例。 ... [详细]
  • 本文通过具体示例详细介绍了 Python 中的装饰器和装饰类的使用方法,包括带参数的装饰器和装饰类的应用场景。 ... [详细]
  • HDU1085 捕获本·拉登!
    问题描述众所周知,本·拉登是一位臭名昭著的恐怖分子,他已失踪多年。但最近有报道称,他藏匿在中国杭州!虽然他躲在杭州的一个洞穴中不敢外出,但近年来他因无聊而沉迷于数学问题,并声称如果有人能解出他的题目,他就自首。 ... [详细]
  • 本视频详细介绍了如何利用J2EE、JBPM 3.x/4.3、Flex流程设计器、jQuery以及授权认证机制构建高效的企业普及版贝斯OA及工作流管理系统。 ... [详细]
  • BL550721、特点液晶驱动输出:Common输出4线,Segment输出36线内置显示寄存器364144bit2线串行接口(SCL,SDA)内置震荡电路内置液晶驱动电源电路13 ... [详细]
  • javascript——对象的概念——函数 1 (函数对象的属性和方法)
    一、创建函数函数是一种对象:Function类是对象,可以通过Function实例化一个函数,不过最多的还是利用function来创建函数。方式一:利用Function类来实例化函 ... [详细]
  • 在开发H5页面时,为了减少资源请求和简化工作流程,直接使用SVG和CSS3来创建简单的图形元素是一个高效的选择。本文将探讨如何不依赖于第三方图标库,仅通过HTML和CSS技术实现一个‘返回顶部’的图标。 ... [详细]
  • LIN总线技术详解
    LIN(Local Interconnect Network)总线是一种基于UART/SCI(通用异步收发器/串行接口)的低成本串行通信协议,主要用于汽车车身网络中智能传感器和执行器之间的通信。 ... [详细]
  • 本文介绍了Linux内核中TCP的三种接收队列:Prequeue、sk_receive_queue和Backlog。这些队列在数据包处理过程中扮演着重要角色,帮助提高系统性能和效率。 ... [详细]
  • 择要:Fundebug的JavaScript毛病监控插件同步支撑Vue.js异步毛病监控。Vue.js从降生至今已5年,尤大在本年2月份宣布了严重更新,即Vue2.6。更新包含新增 ... [详细]
  • 随着苹果公司发布iOS 10,许多用户已经迫不及待地进行了系统更新。对于想要个性化手机界面的用户来说,了解如何在iOS 10中调整字体样式尤为重要。本文将详细介绍在不越狱的情况下,如何在iOS 10中调整字体大小和启用粗体文本。 ... [详细]
  • 本文详细介绍了正则表达式的各种基础指令及其应用实例,帮助读者更好地理解和使用正则表达式。 ... [详细]
  • ZOJ 2760 - 最大流问题
    题目链接:How Many Shortest Paths。题目描述:给定一个包含n个节点的有向图,通过一个n*n的矩阵来表示。矩阵中的a[i][j]值为-1表示从节点i到节点j无直接路径;否则,该值表示从i到j的路径长度。输入起点vs和终点vt,计算从vs到vt的所有不共享任何边的最短路径数量。如果起点和终点相同,则输出无穷大。 ... [详细]
  • 深入解析C++ Atomic编程中的内存顺序
    在多线程环境中,为了防止多个线程同时修改同一数据导致的竞争条件,通常会使用内核级同步对象,如事件、互斥锁和信号量等。然而,这些方法往往伴随着高昂的上下文切换成本。本文将探讨如何利用C++11中的原子操作和内存顺序来优化多线程编程,减少不必要的开销。 ... [详细]
  • 本文介绍了如何使用JavaScript来检测Web页面是通过Safari浏览器的标准模式打开,还是作为独立应用(无地址栏)从iPad的主屏幕启动。 ... [详细]
author-avatar
手机用户2502877211
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有