GitHub:https://github.com/bingoogolapple/BGAQRCode-Android
Layout:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_qrcode"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="cn.queenup.rike.activity.QRCodeActivity">
<cn.bingoogolapple.qrcode.zxing.ZXingView
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/qrcode_zxingview"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:qrcv_animTime="1000"
app:qrcv_borderColor="@android:color/white"
app:qrcv_borderSize="1dp"
app:qrcv_cornerColor="#ffd535"
app:qrcv_cornerLength="20dp"
app:qrcv_cornerSize="3dp"
app:qrcv_maskColor="#33000000"
app:qrcv_rectWidth="200dp"
app:qrcv_scanLineColor="@android:color/white"
app:qrcv_scanLineSize="1dp"
app:qrcv_qrCodeTipText="将二维码放入框内,即可自动扫描"
app:qrcv_topOffset="220dp" />
<include layout="@layout/toolbar_qrcode" />
</RelativeLayout>
Activity:
public class QRCodeActivity extends BaseActivity implements QRCodeView.Delegate{
// 动态申请权限(要申请的权限)
private String[] permissions = {Manifest.permission.CAMERA,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE};
private ImageView iv_toolbar_back;
private ImageView iv_toolbar_flash;
private ZXingView zv_zxingView;
private boolean isFlash;
@Override
protected int getLayoutId() {
return R.layout.activity_qrcode;
}
@Override
protected void initView() {
iv_toolbar_back = (ImageView) findViewById(R.id.toolbar_qrcode_back);
iv_toolbar_flash = (ImageView) findViewById(R.id.toolbar_qrcode_flash);
zv_zxingView = (ZXingView) findViewById(R.id.qrcode_zxingview);
}
@Override
protected void initListener() {
iv_toolbar_back.setOnClickListener(this);
iv_toolbar_flash.setOnClickListener(this);
}
@Override
protected void initData() {
checkPermissions();
zv_zxingView.setDelegate(this);
}
private void checkPermissions() {
// 版本判断。当手机系统大于 23 时,才有必要去判断权限是否获取
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// 检查该权限是否已经获取
int i1 = ContextCompat.checkSelfPermission(this, permissions[0]);
int i2 = ContextCompat.checkSelfPermission(this, permissions[1]);
int i3 = ContextCompat.checkSelfPermission(this, permissions[2]);
// 权限是否已经 授权 GRANTED---授权 DINIED---拒绝
if (i1 != PackageManager.PERMISSION_GRANTED ||
i2 != PackageManager.PERMISSION_GRANTED ||
i3 != PackageManager.PERMISSION_GRANTED) {
// 请求权限
ActivityCompat.requestPermissions(this, permissions, 321);
}
}
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.toolbar_qrcode_back:
finish();
break;
case R.id.toolbar_qrcode_flash:
// 闪光灯
if (isFlash){
zv_zxingView.closeFlashlight();
}else{
zv_zxingView.openFlashlight();
}
isFlash = !isFlash;
break;
}
}
@Override
public void onScanQRCodeSuccess(String result) {
if (TextUtils.isEmpty(result)) {
MyToast.showToast(QRCodeActivity.this,"未发现二维码");
} else {
// 处理二维码 result:扫描的结果
Intent intent = new Intent(this,QRCodeProcessActivity.class);
intent.putExtra(Constants.QRCODE,result);
startActivity(intent);
finish();
}
zv_zxingView.startSpotDelay(500);
}
@Override
public void onScanQRCodeOpenCameraError() {
MyToast.showToast(App.mContext,"打开相机错误,请返回并重新打开");
}
@Override
protected void onStart() {
super.onStart();
zv_zxingView.startCamera();
zv_zxingView.showScanRect();
zv_zxingView.startSpotDelay(500);
}
@Override
protected void onStop() {
zv_zxingView.stopCamera();
super.onStop();
}
@Override
protected void onDestroy() {
zv_zxingView.onDestroy();
super.onDestroy();
}
}