首先先放轮子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二维码扫描了,是不是很简单啊,这里给大家一张扫描测试的图片哈~~~