统一扫码服务(Scan Kit)提供便捷的条形码和二维码扫描、解析、生成能力,帮助您快速构建应用内的扫码功能。
得益于华为在计算机视觉领域能力的积累,Scan Kit可以实现远距离码或小型码的检测和自动放大,同时针对常见复杂扫码场景(如反光、暗光、污损、模糊、柱面)做了针对性识别优化,提升扫码成功率与用户体验。
在本篇codelab中,你将创建一个使用Default View Mode的扫码App。
若您需要正式发布集成Scan Kit的应用,请参见HUAWEI HMS Core 集成准备中详细说明来完成接入准备。
针对Android Studio开发环境,华为提供了Maven仓集成方式的HMS Core SDK包。在开始开发前,您需要将HMS Core SDK集成到您的Android Studio开发环境中。
如果在AppGallery Connect中开通了相关服务则需要将"agconnect-services.json"文件添加到您的App中。
Android Studio的代码库配置在Gradle 插件7.0以下版本、7.0版本和7.1及以上版本有所不同。请根据您当前的Gradle 插件版本,选择对应的配置过程。
7.0以下版本 | 7.0版本 | 7.1及以上版本 |
7.0以下版本
a. 打开Android Studio项目级"build.gradle"文件。
b. 添加HUAWEI agcp插件以及Maven代码库。
buildscript {
repositories {
google()
jcenter()
// 配置HMS Core SDK的Maven仓地址。
maven {url 'https://developer.huawei.com/repo/'}
}
dependencies {
...
// 增加agcp插件配置,推荐您使用最新版本的agcp插件。
classpath 'com.huawei.agconnect:agcp:1.6.0.300'
}
}
allprojects {
repositories {
google()
jcenter()
// 配置HMS Core SDK的Maven仓地址。
maven {url 'https://developer.huawei.com/repo/'}
}
}
7.0版本
a. 打开Android Studio项目级"build.gradle"文件。
b. 添加HUAWEI agcp插件以及Maven代码库。
buildscript {
repositories {
google()
jcenter()
// 配置HMS Core SDK的Maven仓地址。
maven {url 'https://developer.huawei.com/repo/'}
}
dependencies {
...
// 增加agcp插件配置,推荐您使用最新版本的agcp插件。
classpath 'com.huawei.agconnect:agcp:1.6.0.300'
}
}
c. 打开项目级"settings.gradle"文件,配置HMS Core SDK的Maven仓地址。
dependencyResolutionManagement {
...
repositories {
google()
jcenter()
// 配置HMS Core SDK的Maven仓地址。
maven {url 'https://developer.huawei.com/repo/'}
}
}
7.1及以上版本
a. 打开Android Studio项目级"build.gradle"文件。
b. 如果App中添加了"agconnect-services.json"文件则需要在"buildscript > dependencies"中增加agcp插件配置。
buildscript {
dependencies {
...
// 增加agcp插件配置,推荐您使用最新版本的agcp插件。
classpath 'com.huawei.agconnect:agcp:1.6.0.300'
}
}
c. 打开项目级"settings.gradle"文件,配置HMS Core SDK的Maven仓地址。
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
// 配置HMS Core SDK的Maven仓地址。
maven { url 'https://developer.huawei.com/repo/' }
}
}
dependencyResolutionManagement {
...
repositories {
google()
mavenCentral()
// 配置HMS Core SDK的Maven仓地址。
maven { url 'https://developer.huawei.com/repo/' }
}
}
dependencies {
implementation 'com.huawei.hms:scan:{version}'
}
apply plugin: 'com.huawei.agconnect'
plugins {
id 'com.android.application'
// 添加如下配置
id 'com.huawei.agconnect'
}
<!--相机权限-->
<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" />
public void newViewBtnClick(View view) {
// DEFAULT_VIEW为用户自定义用于接收权限校验结果。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
this.requestPermissions(
new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE},
DEFAULT_VIEW);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (permissions == null || grantResults == null || grantResults.length < 2 || grantResults[0] != PackageManager.PERMISSION_GRANTED || grantResults[1] != PackageManager.PERMISSION_GRANTED) {
return;
}
}
Kotlin示例代码:
public fun newViewBtnClick(view:View?) {
// DEFAULT_VIEW为用户自定义用于接收权限校验结果。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
this.requestPermissions(
arrayOf(Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE),
DEFAULT_VIEW)
}
}
override
fun onRequestPermissionsResult(requestCode:Int, permissions:Array<out String>, grantResults:IntArray) {
if (permissions == null || grantResults.size< 2 || grantResults[0] != PackageManager.PERMISSION_GRANTED || grantResults[1] != PackageManager.PERMISSION_GRANTED) {
return
}
if (requestCode == DEFAULT_VIEW) {
// 调用DefaultView扫码界面。
ScanUtil.startScan(this@MainActivity, REQUEST_CODE_SCAN, HmsScanAnalyzerOptions.Creator().setHmsScanTypes(HmsScan.ALL_SCAN_TYPE).create())
}
}
Scan Kit提供4种不同的调用模式,具体的差别参见开发指南。本选择了Default View Mode进行开发,实现扫码功能。
Java示例代码:
// 申请权限之后,调用DefaultView扫码界面。
int result = ScanUtil.startScan(MainActivity.this, REQUEST_CODE_SCAN, new HmsScanAnalyzerOptions.Creator().setHmsScanTypes(HmsScan.ALL_SCAN_TYPE).create());
Kotlin示例代码:
// 申请权限之后,调用DefaultView扫码界面。
ScanUtil.startScan(this@MainActivity, REQUEST_CODE_SCAN, HmsScanAnalyzerOptions.Creator().setHmsScanTypes(HmsScan.ALL_SCAN_TYPE).create())
在MainActivity中处理扫码结果,在Sample Code MainActivity.java文件中,增加:
Java示例代码:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// 当扫码页面结束后,处理扫码结果。
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != RESULT_OK || data == null) {
return;
}
// 从onActivityResult返回data中,用ScanUtil.RESULT作为key值取到HmsScan返回值。
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;
}
}
}
Kotlin示例代码:
override fun onActivityResult(requestCode:Int, resultCode:Int, data:Intent?) {
// 当扫码页面结束后,处理扫码结果。
super.onActivityResult(requestCode, resultCode, data)
if (resultCode != RESULT_OK || data == null) {
return
}
// 从onActivityResult返回data中,用ScanUtil.RESULT作为key值取到HmsScan返回值。
else if (requestCode == REQUEST_CODE_SCAN) {
when (val obj: Any = data.getParcelableExtra(ScanUtil.RESULT)) {
is HmsScan -> {
if (!TextUtils.isEmpty(obj.getOriginalValue())) {
Toast.makeText(this, obj.getOriginalValue(), Toast.LENGTH_SHORT).show()
}
return
}
}
}
}
完成开发后,点击开发界面上的运行图标,运行Android Studio工程打包生成APK,并安装在测试手机上。
1.首次进入应用时的界面: | 2.点击Default View Mode: | 3.扫码后返回结果: |
![]() | ![]() | ![]() |
干得好,您已经成功完成了codelab并学到了:
您可以阅读下面链接,了解更多相关的信息。
点击下载源码。