Android scan and generate QR code (using Huawei ScanKit)

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" />

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

Guess you like

Origin blog.csdn.net/lanrenxiaowen/article/details/122983230