本文主要讲如何使用华为统一扫码scan Kit进行扫一扫以及生成二维码,
有兴趣的可以看一下华为扫描和Zxing扫描的区别
使用步骤
1、在全局的build.gradle文件里添加华为maven仓库
buildscript {
repositories {
maven {
url 'http://developer.huawei.com/repo/'}
}
}
allprojects {
repositories {
maven {
url 'http://developer.huawei.com/repo/'}
}
}
2、在app的build.gradle文件里添加Scan Kit的依赖
implementation 'com.huawei.hms:scanplus:1.1.3.301'
3、在清单文件里添加权限和扫码页面的声明
<!--相机权限-->
<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" />
<!--<!—对扫码页面进行声明–>-->
<activity android:name="com.huawei.hms.hmsscankit.ScanKitActivity" />
添加混淆
-ignorewarnings
-keepattributes *Annotation*
-keepattributes Exceptions
-keepattributes InnerClasses
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable
-keep class com.hianalytics.android.**{
*;}
-keep class com.huawei.**{
*;}
4、下面是代码调用部分
扫一扫
/**
* 请求权限
* */
private void requestPermission(int requestCode, int mode) {
ActivityCompat.requestPermissions(
this,
new String[]{
Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE},
requestCode);
}
@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) {
ScanUtil.startScan(this, REQUEST_CODE_SCAN_ONE, new HmsScanAnalyzerOptions.Creator().setHmsScanTypes(HmsScan.ALL_SCAN_TYPE).create());
}
}
@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) {
mCeshi.setText(obj.originalValue);
}
}
}
生成二维码
ScanUtil.buildBitmap("这里是要生成二维码的内容",3,300,300,new HmsBuildBitmapOption.Creator().create())
下面是全部的代码,这里我在页面中加了两个按钮,一个开启扫一扫,一个生成二维码
public class MainActivity extends AppCompatActivity {
private TextView mCeshi,mCeshi1;
private ImageView mCeshi2;
private int CAMERA_REQ_CODE=2;
private int DECODE=3;
private int REQUEST_CODE_SCAN_ONE=4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCeshi=findViewById(R.id.ceshi);
mCeshi1=findViewById(R.id.ceshi1);
mCeshi2=findViewById(R.id.ceshi2);
mCeshi.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
requestPermission(CAMERA_REQ_CODE, DECODE);
}
});
mCeshi1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
mCeshi2.setImageBitmap(ScanUtil.buildBitmap("zhangyujiezhangyujie",3,300,300,new HmsBuildBitmapOption.Creator().create()));
} catch (WriterException e) {
e.printStackTrace();
}
}
});
}
/**
* 请求权限
* */
private void requestPermission(int requestCode, int mode) {
ActivityCompat.requestPermissions(
this,
new String[]{
Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE},
requestCode);
}
@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) {
ScanUtil.startScan(this, REQUEST_CODE_SCAN_ONE, new HmsScanAnalyzerOptions.Creator().setHmsScanTypes(HmsScan.ALL_SCAN_TYPE).create());
}
}
@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) {
mCeshi.setText(obj.originalValue);
}
}
}
}
自此结束