This article mainly talks about how to use Huawei's unified scan kit to scan and generate QR codes.
If you are interested, you can take a look at the difference between Huawei scan and Zxing scan.
Step
1. Add Huawei maven warehouse to the global build.gradle file
buildscript {
repositories {
maven {
url 'http://developer.huawei.com/repo/'}
}
}
allprojects {
repositories {
maven {
url 'http://developer.huawei.com/repo/'}
}
}
2. Add the Scan Kit dependency in the app's build.gradle file
implementation 'com.huawei.hms:scanplus:1.1.3.301'
3. Add the statement of permissions and scanning page in the manifest file
<!--相机权限-->
<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" />
add confusion
-ignorewarnings
-keepattributes *Annotation*
-keepattributes Exceptions
-keepattributes InnerClasses
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable
-keep class com.hianalytics.android.**{
*;}
-keep class com.huawei.**{
*;}
4. The following is the code calling part,
scan it
/**
* 请求权限
* */
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);
}
}
}
Generate QR code
ScanUtil.buildBitmap("这里是要生成二维码的内容",3,300,300,new HmsBuildBitmapOption.Creator().create())
The following is all the code, here I added two buttons to the page, one to open the scan, one to generate a QR code
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);
}
}
}
}
end here