package com.zenglb.framework.activity.zxing;
import android.Manifest;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.Toast;
import com.google.zxing.ResultPoint;
import com.google.zxing.client.android.BeepManager;
import com.journeyapps.barcodescanner.BarcodeCallback;
import com.journeyapps.barcodescanner.BarcodeResult;
import com.journeyapps.barcodescanner.DecoratedBarcodeView;
import com.zenglb.baselib.base.BaseActivity;
import com.zenglb.framework.R;
import java.util.List;
import permissions.dispatcher.NeedsPermission;
import permissions.dispatcher.OnNeverAskAgain;
import permissions.dispatcher.OnPermissionDenied;
import permissions.dispatcher.OnShowRationale;
import permissions.dispatcher.PermissionRequest;
import permissions.dispatcher.RuntimePermissions;
/**
* 二维码扫描
* <p>
* anylife.zlb@gmail.com
*/
@RuntimePermissions
public class ZxingActivity extends BaseActivity {
private String TAG = ZxingActivity.class.getSimpleName();
private DecoratedBarcodeView barcodeView;
private BeepManager beepManager;
private String lastText;
private BarcodeCallback callback = new BarcodeCallback() {
@Override
public void barcodeResult(BarcodeResult result) {
if (result.getText() == null || result.getText().equals(lastText)) {
// Prevent duplicate scans
return;
}
lastText = result.getText();
beepManager.playBeepSoundAndVibrate();
Intent data = new Intent();
data.putExtra("qrcode", result.getText()); //把数据返回给发起的Activity
setResult(RESULT_OK, data);
ZxingActivity.this.finish();
}
@Override
public void possibleResultPoints(List<ResultPoint> resultPoints) {
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle("二维码");
ZxingActivityPermissionsDispatcher.showCameraWithCheck(this);
}
@Override
protected int setLayoutId() {
return R.layout.activity_scan;
}
@Override
protected void initViews() {
barcodeView = (DecoratedBarcodeView) findViewById(R.id.barcode_scanner);
barcodeView.decodeContinuous(callback);
barcodeView.setStatusText("音量加减按键可以控制手电筒开关");
beepManager = new BeepManager(this);
}
@Override
protected void onResume() {
super.onResume();
barcodeView.resume();
}
@Override
protected void onPause() {
super.onPause();
barcodeView.pause();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return barcodeView.onKeyDown(keyCode, event) || super.onKeyDown(keyCode, event);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
// super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// NOTE: delegate the permission handling to generated method
ZxingActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);
}
//=============== 下面都是权限管理的===================
/**
* 权限被同意了,同意后每次check 都会被调用
*/
@NeedsPermission(Manifest.permission.CAMERA)
void showCamera() {
Log.e(TAG, "showCamera");
}
@OnShowRationale(Manifest.permission.CAMERA)
void showRationaleForCamera(final PermissionRequest request) {
Log.e(TAG, "showRationaleForCamera");
new AlertDialog.Builder(this)
.setPositiveButton("好的", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
request.proceed();
}
})
.setNegativeButton("不给", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
request.cancel();
}
})
.setCancelable(false)
.setMessage("扫码需要摄像头权限,应用将要申请摄像头权限")
.show();
}
/**
* 权限申请被拒绝了,简单一点关闭页面然后弹出Toast
*/
@OnPermissionDenied(Manifest.permission.CAMERA)
void showDeniedForCamera() {
ZxingActivity.this.finish();
Toast.makeText(ZxingActivity.this,"你拒绝了授权使用此功能",Toast.LENGTH_LONG).show();
}
@OnNeverAskAgain(Manifest.permission.CAMERA)
void showNeverAskForCamera() {
Log.e(TAG, "showNeverAskForCamera");
}
}