前言
现在无论什么APP都会有一个扫一扫的功能,网络上的各个软件的扫码功能也都大同小异,当然你想要自定义属于自己APP的扫码界面及功能的话,还是要花一番功夫的,不过做Demo,用第三方的就可以了。
正文
华为统一扫码服务集成使用步骤
效果图
Demo源码
① 创建Android项目
创建好了。
②配置HMS SDK的maven仓库地址
打开工程目录下的build.gradle文件
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'
}
}
增加后如下图,只改动增加的,其他不动。
③ 添加编译依赖
打开应用级的build.gradle文件
引用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'
重新打开修改完的build.gradle文件,右上方出现“Sync Now”链接。点击“Sync Now”等待同步完成。如果出现错误,请检查网络连接是否正常,以及检查gradle文件是否正确。
④ 配置AndroidManifest.xml
打开AndroidManifest.xml文件
申请静态权限
<!--相机权限-->
<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" />
⑤ 实现功能
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"
⑥ 运行起来
这里我放一个二维码
扫描后的结果
当然还有很多效果,你要自己去发掘