天天看點

記一次接入ZXing二維碼掃描SDK

首先先放輪子git位址 :Zxing二維碼github位址

  • 接着在app裡build.gradle檔案中添加依賴
//Zxing二維碼掃描
    implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.3.6'
           
  • 接着我們在MainActivity中添加一個按鈕,點選時進入掃描頁面
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.QR).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //動态申請相機權限
                if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA)
                        != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.CAMERA},1);
                } else {
                    goScanner();
                }
            }
        });
    }


    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 1){
            if (grantResults.length>0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                //開啟權限
                goScanner();
            } else {
                Toast.makeText(MainActivity.this,"您拒絕了權限申請,無法使用相機掃描",Toast.LENGTH_SHORT).show();
            }
        }
    }

    private void goScanner(){
        Intent intent = new Intent(MainActivity.this, ScannerActivity.class);
        startActivity(intent);
    }
}
           

由于6.0後權限問題,這裡需要動态申請相機權限。小夥伴們不要忘記了

  • 接着我們來看ScannerActivity布局代碼,隻有一個簡單的ZXingView控件,其中布局中的自定義控件屬性,大家可以去前面連接配接git中檢視,git中的屬性介紹很全面
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ScannerActivity">

    <cn.bingoogolapple.qrcode.zxing.ZXingView
        android:id="@+id/m_zxing_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:qrcv_animTime="1000"
        app:qrcv_borderColor="#ffffff"
        app:qrcv_cornerLength="20dp"
        app:qrcv_cornerSize="3dp"
        app:qrcv_maskColor="#33ffffff"
        app:qrcv_rectWidth="200dp"
        app:qrcv_scanLineColor="#ff0000"
        app:qrcv_scanLineSize="1dp"
        app:qrcv_topOffset="90dp"
        >

    </cn.bingoogolapple.qrcode.zxing.ZXingView>

</RelativeLayout>
           
  • 接着我們來看Activity中的代碼
public class ScannerActivity extends AppCompatActivity implements QRCodeView.Delegate {
    private ZXingView zXingView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_scanner);
        zXingView = findViewById(R.id.m_zxing_view);
        zXingView.setDelegate(this);
    }

    @Override
    protected void onStart() {
        super.onStart();
        zXingView.startCamera(); // 打開後置攝像頭開始預覽,但是并未開始識别
//        zXingView.startCamera(Camera.CameraInfo.CAMERA_FACING_FRONT); // 打開前置攝像頭開始預覽,但是并未開始識别
        zXingView.startSpotAndShowRect(); // 顯示掃描框,并開始識别
    }

    @Override
    protected void onStop() {
        zXingView.stopCamera(); // 關閉攝像頭預覽,并且隐藏掃描框
        super.onStop();
    }


    @Override
    protected void onDestroy() {
        zXingView.onDestroy();  //銷毀控件
        super.onDestroy();
    }

    /**
     * 掃描二維碼成功時觸發
     * @param result
     */
    @Override
    public void onScanQRCodeSuccess(String result) {
        Log.e("TAG","onScanQRCodeSuccess        result="+result);
        Toast.makeText(ScannerActivity.this,result,Toast.LENGTH_SHORT).show();
        finish();
    }

    /**
     * 相機環境亮度發生變化時觸發
     * @param isDark
     */
    @Override
    public void onCameraAmbientBrightnessChanged(boolean isDark) {
        Log.e("TAG","onCameraAmbientBrightnessChanged        isDark="+isDark);

    }

    /**
     * 掃描二維碼打開相機錯誤時觸發
     */
    @Override
    public void onScanQRCodeOpenCameraError() {
        Log.e("TAG","onScanQRCodeOpenCameraError");
    }
}
           
  • 最後不要忘記了在在Manifest檔案中添權重限
...
  	<uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.VIBRATE"/>
    <uses-permission android:name="android.permission.FLASHLIGHT"/>
    ...
           

這樣就快速內建了Zxing二維碼掃描了,是不是很簡單啊,這裡給大家一張掃描測試的圖檔哈~~~

記一次接入ZXing二維碼掃描SDK

繼續閱讀