이 기사는 주로 Huawei의 통합 스캔 키트를 사용하여 QR 코드를 스캔하고 생성하는 방법에 대해 설명합니다. 관심이 있는 경우 Huawei 스캔과 Zxing 스캔의 차이점을
살펴볼 수 있습니다 . Step 1. 글로벌 빌드에 Huawei maven 창고 추가 .gradle 파일
buildscript {
repositories {
maven {
url 'http://developer.huawei.com/repo/'}
}
}
allprojects {
repositories {
maven {
url 'http://developer.huawei.com/repo/'}
}
}
2. 앱의 build.gradle 파일에 스캔 키트 종속성을 추가합니다.
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);
}
}
}
QR 코드 생성
ScanUtil.buildBitmap("这里是要生成二维码的内容",3,300,300,new HmsBuildBitmapOption.Creator().create())
다음은 모든 코드입니다. 페이지에 두 개의 버튼을 추가했습니다. 하나는 스캔을 여는 버튼이고 다른 하나는 QR 코드를 생성하는 버튼입니다.
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);
}
}
}
}
여기서 끝