Android 扫描二维码(使用华为统一扫码服务 + 附源码)

简介: Android 扫描二维码(使用华为统一扫码服务 + 附源码)

前言


现在无论什么APP都会有一个扫一扫的功能,网络上的各个软件的扫码功能也都大同小异,当然你想要自定义属于自己APP的扫码界面及功能的话,还是要花一番功夫的,不过做Demo,用第三方的就可以了。


正文


效果图

image.gif


① 创建Android项目


20200522162309715.png

20200522162412278.png


创建好了。


②配置HMS SDK的maven仓库地址


打开工程目录下的build.gradle文件


20200522163717353.png


a. 在allprojects ->repositories里面配置仓地址


allprojects { 
    repositories { 
        google() 
        jcenter() 
        maven {url 'https://developer.huawei.com/repo/'} 
    } 
 }


b. 在buildscript->repositories里面配置HMS SDK的maven仓地址

buildscript { 
    repositories { 
        google() 
        jcenter() 
        maven {url 'https://developer.huawei.com/repo/'} 
    } 
 }


c.在buildscript ->dependencies里面增加配置。

buildscript{ 
    dependencies { 
         classpath 'com.huawei.agconnect:agcp:1.2.1.301' 
    } 
 }


增加后如下图,只改动增加的,其他不动。

20200522163433518.png


③ 添加编译依赖


打开应用级的build.gradle文件

20200522163753894.png


引用SDK,Scan Kit提供两种SDK,您可以根据需求选择合适的SDK,


  implementation 'com.huawei.hms:scan:1.1.3.301'//对SDK大小敏感的开发者
    implementation 'com.huawei.hms:scanplus:1.1.3.301'//对SDK大小不敏感且希望所有机型均具备最佳体验的开发者


怎么看都是这个带了plus的牛逼一些,是因为scan对于非华为手机使用普通识别模型,而scanplus对非华为手机使用增强识别模型,虽然你感觉不到,不过就用plus了。


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


在文件头添加配置

apply plugin: 'com.huawei.agconnect'

20200522164740460.png

20200522164819482.png


重新打开修改完的build.gradle文件,右上方出现“Sync Now”链接。点击“Sync Now”等待同步完成。如果出现错误,请检查网络连接是否正常,以及检查gradle文件是否正确。

20200522164912201.png


④ 配置AndroidManifest.xml


打开AndroidManifest.xml文件

20200522165059917.png


申请静态权限

  <!--相机权限-->
    <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" />


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

<activity android:name="com.huawei.hms.hmsscankit.ScanKitActivity" />

20200522165653152.png


⑤ 实现功能


a. 修改activity_main.xml布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <Button
        android:id="@+id/btn_scan"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:text="扫一扫" />
</LinearLayout>


b. 添加标识和动态权限申请

  public static final int CAMERA_REQ_CODE = 111;
    public static final int DECODE = 1;
    private static final int REQUEST_CODE_SCAN_ONE = 0X01;


在启动扫码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);
    }


c. 在权限申请返回中启动扫码界面

  //权限申请返回
  @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) {
          //启动扫描Acticity
            ScanUtil.startScan(this, REQUEST_CODE_SCAN_ONE, new HmsScanAnalyzerOptions.Creator().create());
        }
    }


d. 在Activity回调中获取扫描码的结果

  //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) {
                Toast.makeText(this,obj.originalValue,Toast.LENGTH_SHORT).show();
            }
        }
    }


e. 修改activity_main.xml

android:onClick="loadScanKitBtnClick"

2020052217122132.png


⑥ 运行起来

20210429092044302.gif


当然还有很多效果,你要自己去发掘


源码

相关文章
|
2月前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
24 1
|
3月前
|
JavaScript 前端开发 Android开发
让Vite+Vue3项目在Android端离线打开(不需要起服务)
让Vite+Vue3项目在Android端离线打开(不需要起服务)
100 10
|
3月前
|
调度 Android开发 UED
Android经典实战之Android 14前台服务适配
本文介绍了在Android 14中适配前台服务的关键步骤与最佳实践,包括指定服务类型、请求权限、优化用户体验及使用WorkManager等。通过遵循这些指南,确保应用在新系统上顺畅运行并提升用户体验。
217 6
|
3月前
|
安全 API 开发工具
Android平台RTMP推送|轻量级RTSP服务如何实现麦克风|扬声器声音采集切换
Android平台扬声器播放声音的采集,在无纸化同屏等场景下,意义很大,早期低版本的Android设备,是没法直接采集扬声器audio的(从Android 10开始支持),所以,如果需要采集扬声器audio,需要先做系统版本判断,添加相应的权限。
|
3月前
|
编解码 开发工具 Android开发
Android平台实现屏幕录制(屏幕投影)|音频播放采集|麦克风采集并推送RTMP或轻量级RTSP服务
Android平台屏幕采集、音频播放声音采集、麦克风采集编码打包推送到RTMP和轻量级RTSP服务的相关技术实现,做成高稳定低延迟的同屏系统,还需要有配套好的RTMP、RTSP直播播放器
|
4月前
|
开发工具 uml git
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
本文分享了下载AOSP源码的方法,包括如何使用repo工具和处理常见的repo sync错误,以及配置Python环境以确保顺利同步特定版本的AOSP代码。
481 0
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
|
4月前
|
Java Android开发 芯片
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
本文介绍了如何将基于全志H713芯片的AOSP Android源码导入Android Studio以解决编译和编码问题,通过操作步骤的详细说明,展示了在Android Studio中利用代码提示和补全功能快速定位并修复编译错误的方法。
144 0
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
|
4月前
|
开发工具 Android开发 git
全志H713 Android 11 :给AOSP源码,新增一个Product
本文介绍了在全志H713 Android 11平台上新增名为myboard的产品的步骤,包括创建新的device目录、编辑配置文件、新增内核配置、记录差异列表以及编译kernel和Android系统的详细过程。
136 0
|
4月前
|
Ubuntu 开发工具 Android开发
Repo下载、编译AOSP源码:基于Ubuntu 21.04,android-12.1.0_r27
文章记录了作者在Ubuntu 21.04服务器上配置环境、下载并编译基于Android 12.1.0_r27版本的AOSP源码的过程,包括解决编译过程中遇到的问题和错误处理方法。
211 0
|
Java 中间件 Linux
让华为举步维艰,Android曾距离成为国产系统仅一步之遥!
作为目前手机市场份额最高的操作系统,Android已经达到一种可以决定一家手机公司命运的程度。
让华为举步维艰,Android曾距离成为国产系统仅一步之遥!