Android 集成二维码扫描器






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();
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值