Android 스캔 및 QR 코드 생성(Huawei ScanKit 사용)

이 기사는 주로 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" />

<!--<!—对扫码页面进行声明&ndash;&gt;-->
<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);
            }
        }
    }
}

여기서 끝

Supongo que te gusta

Origin blog.csdn.net/lanrenxiaowen/article/details/122983230
Recomendado
Clasificación