安卓使用华为HMS实现扫码功能
@安卓使用华为HMS实现扫码功能最近接到了一个项目,要在我们的app上集成扫码登录功能,类似于微信一样,在手机端扫码即可实现电脑端登录。最开始打算使用谷歌提供的开发包进行开发,但是发现谷歌提供的开发包开发起来繁琐而且识别率低,代码编写繁琐,这是发现了华为开发者网站提供hms.scan的扫码模块开发包,方便快捷,而且识别率高,可同时识别多个二维码。废话不多少说,直接来如何实现1首先创建一个安卓stu
@安卓使用华为HMS实现扫码功能
最近接到了一个项目,要在我们的app上集成扫码登录功能,类似于微信一样,在手机端扫码即可实现电脑端登录。
最开始打算使用谷歌提供的开发包进行开发,但是发现谷歌提供的开发包开发起来繁琐而且识别率低,代码编写繁琐,这是发现了华为开发者网站提供hms.scan的扫码模块开发包,方便快捷,而且识别率高,可同时识别多个二维码。
废话不多少说,直接来如何实现
1首先创建一个安卓studio工程
点击file->new->New project
点击 next
点击finsh 这样一个工程就创建完成了
2导入华为hms包
(1)在build.grade配置文件中添加华为库
implementation “com.huawei.hms:scan:1.2.2:300”
implementation “com.huawei.hms:scanplus:1.2.2:300”
华为提供了两种包,scan对非华为手机效果一般,scanplus对非华为手机也有很好效果。
注意:有时可能无法访问华为仓库,下载不下来对应的开发包,这是可以选择不从华为仓库获取,将包保存在本地libs文件夹中
注释掉这行,不从仓库中获取
将开发包拷贝到libs中,开发包可在最下方demo链接中获取
(2)在项目build.grade文件中添加华为仓库路径
http://developer.huawei.com/repo/
这样开发包就导入成功,点击构建按钮就可导入进来
3,布局界面代码
(1)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center|center_horizontal|center_vertical"
android:orientation="vertical">
<Button
android:layout_width="200dp"
android:layout_height="100dp"
android:onClick="newViewBtnClick"
android:textAllCaps="false"
android:text="点击扫码" />
</LinearLayout>
(2)添加权限,打开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" />
(3)回到主界面MainActivity,
在头部引用华为库
import android.Manifest;
import com.huawei.hms.hmsscankit.ScanUtil;
import com.huawei.hms.ml.scan.HmsScan;
import com.huawei.hms.ml.scan.HmsScanAnalyzerOptions;
在类中定义变量
public static final int DEFAULT_VIEW = 0x22;
private static final int REQUEST_CODE_SCAN = 0x01;
添加newViewBtnClick的实现函数
public void newViewBtnClick(View 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;
}
if (requestCode == DEFAULT_VIEW) {
//start ScankitActivity for scanning barcode
ScanUtil.startScan(MainActivity.this, REQUEST_CODE_SCAN, new HmsScanAnalyzerOptions.Creator().setHmsScanTypes(HmsScan.ALL_SCAN_TYPE).create());
}
}
@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;
}
// Obtain the return value of HmsScan from the value returned by the onActivityResult method by using ScanUtil.RESULT as the key value.
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;
}
}
}
4 之后我们编译生成apk文件放到手机上就可以看到效果了
这样我们就完成了,亲测效果很好
最后附上华为hms scan官方说明
https://developer.huawei.com/consumer/cn/codelab/ScanKit-DefaultView/index.html#8
还有本人demo示例代码
链接:https://pan.baidu.com/s/1Jgr68XRjFYfb7_5SAoG_nw
提取码:xukv
更多推荐
所有评论(0)