简介

华为统一扫码服务(Scan Kit)提供便捷的条形码和二维码扫描、解析、生成能力,帮助您快速构建应用内的扫码功能。

得益于华为在计算机视觉领域能力的积累,Scan Kit可以实现远距离码或小型码的检测和自动放大,同时针对常见复杂扫码场景(如反光、暗光、污损、模糊、柱面)做了针对性识别优化,提升扫码成功率与用户体验。

您将建立什么

在这个Codelab中,你将创建一个使用Bitmap Mode的扫码App。

您将会学到什么

硬件要求

  1. 安装了Android Studio的开发计算机。
  2. Android 4.4 (SDK Version 19) 及以上Android机型。

软件要求

  1. Android Studio
  2. Java JDK 1.8及以上版本开发环境

若您需要正式发布集成Scan Kit的应用,请参考《HUAWEI HMS Core 集成准备》中详细说明来完成接入准备。
若您使用本Codelab Demo验证时,直接使用Sample Code中的设置,可以跳过此步骤。

Sample Code下载

针对Android Studio开发环境,华为提供了Maven仓集成方式的HMS Core SDK包。在开始开发前,您需要将HMS Core SDK集成到您的Android Studio开发环境中。

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

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

  1. 登录 AppGallery Connect网站,点击"我的项目"。
  2. 在项目列表中找到您的项目,在项目中点击需要继承HMS Core SDK的应用。
  3. 在"项目设置 > 常规"页面的"应用"区域,点击"agconnect-services.json"下载配置文件。
  4. 将"agconnect-services.json"文件拷贝到应用级根目录下。

配置HMS Core SDK的Maven仓地址

1、打开Android Studio项目级"build.gradle"文件。

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

添加编译依赖

  1. 打开Android Studio项目级"build.gradle"文件。
  2. 在"dependencies"中添加如下编译依赖,{version}需要替换为实际的SDK版本号,如当前版本:implementation 'com.huawei.hms:scan:1.2.2.300'。
    dependencies { implementation 'com.huawei.hms:scan:{version}' }
  3. 在文件头apply plugin: 'com.android.application'下一行添加如下配置。
    apply plugin: 'com.huawei.agconnect'
  4. 同步工程。在完成以上的配置后,点击工具栏中的gradle同步图标,完成"build.gradle"文件的同步,将相关依赖下载到本地。
  1. 在调用Scan Kit时,开发者需要先在Manifest中声明相应的权限。在AndroidManifest.xml文件中,增加:
    <!--读文件权限--> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  2. 声明权限后,还需要在代码中动态申请一下权限。在MainActivity.java中,增加:
    public void newViewBtnClick(View view) { //BITMAP为用户自定义用于接收权限校验结果 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { this.requestPermissions( new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, BITMAP); } } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (permissions == null || grantResults == null || grantResults[0] != PackageManager.PERMISSION_GRANTED) { return; } if (requestCode == BITMAP) { //调用系统相册 Intent pickIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); pickIntent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); MainActivity.this.startActivityForResult(pickIntent, REQUEST_CODE_PHOTO); } }

Scan Kit提供4种不同的调用模式,具体的差别参见《开发指南》。本CodeLab选择了Bitmap Mode进行开发,实现扫码功能。

  1. 获取系统相册返回的Bitmap,具体示例代码请参照《开发指南》
  2. 调用decodeWithBitmap扫码接口。在MainActivity中调用扫码,在Sample Code app/src/main/java/com/example/scankitdemo/MainActivity.java文件中,增加:
    @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { //receive result after your activity finished scanning super.onActivityResult(requestCode, resultCode, data); if (resultCode != RESULT_OK || data == null) { return; } if (requestCode == REQUEST_CODE_PHOTO) { //获取图片路径 final String path = getImagePath(MainActivity.this, data); if (TextUtils.isEmpty(path)) { return; } //从图片路径获取Bitmap Bitmap bitmap = ScanUtil.compressBitmap(MainActivity.this, path); //调用decodeWithBitmap方法,传入Bitmap HmsScan[] result1 = ScanUtil.decodeWithBitmap(MainActivity.this, bitmap, new HmsScanAnalyzerOptions.Creator().setHmsScanTypes(0).setPhotoMode(false).create()); //获取具体扫码结果 if (result1 != null && result1.length > 0) { if (!TextUtils.isEmpty(result1[0].getOriginalValue())) { Toast.makeText(this, result1[0].getOriginalValue(), Toast.LENGTH_SHORT).show(); } } } }

完成开发后,点击开发界面上的运行图标,运行Android Studio工程打包生成APK,并安装在测试手机上。运行界面如下图所示:

首次进入应用时的界面:

点击 Bitmap Mode:

扫码后返回结果:

干得好,你已经成功完成了Codelab并学到了:

  1. 如何集成华为Scan Kit。
  2. 如何使用华为Scan Kit的Bitmap Mode进行扫码。

如需了解更多与华为Scan Kit相关的信息,请关注我们的官方网站。开发过程中如果遇见问题,请参考我们的常见问题解答。

您可以阅读下面链接,了解更多相关的信息。

  1. 开发指南
  2. API参考

点击下方按钮下载源码。

完整源码下载

已复制代码