首先先放輪子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二維碼掃描了,是不是很簡單啊,這裡給大家一張掃描測試的圖檔哈~~~