Android的扫一扫功能

2021-09-08  本文已影响0人  Poison丶Carson

在项目尤其是电商项目,可能会频繁用到扫一扫的功能,这里我们使用google自带的控件,首先我们需要的是集成他的jar,这里的版本根据官网更新的录入即可

//noinspection GradleDependency 扫描二维码条形码
implementation 'com.google.zxing:core:3.2.1'
implementation 'cn.bingoogolapple:bga-qrcodecore:1.1.7@aar'
implementation 'cn.bingoogolapple:bga-zxing:1.1.7@aar'

gitee官网信息

然后我们在布局中进行调用

<cn.bingoogolapple.qrcode.zxing.ZXingView
    android:id="@+id/zxing_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:qrcv_animTime="1000"
    app:qrcv_borderColor="@android:color/white"
    app:qrcv_borderSize="1px"
    app:qrcv_cornerColor="@color/colorWhite"
    app:qrcv_cornerLength="20dp"
    app:qrcv_cornerSize="5dp"
    app:qrcv_isShowDefaultScanLineDrawable="true"
    app:qrcv_isShowTipTextAsSingleLine="true"
    app:qrcv_isTipTextBelowRect="true"
    app:qrcv_maskColor="#ff353336"
    app:qrcv_rectWidth="200dp"
    app:qrcv_scanLineColor="@color/colorWhite"
    app:qrcv_scanLineSize="2dp"
    app:qrcv_tipTextColor="@android:color/white"
    app:qrcv_tipTextMargin="15dp"
    app:qrcv_tipTextSize="18dp" />

这里附上zxing的相关参数属性,可以根据其中去自定义我们的扫描器

自定义属性说明

最后我们在activity中进行调用就可以了,别忘了添加相机权限哦,如果需要的话还可以加上震动的权限

//扫条形码
binding.zxingView.changeToScanBarcodeStyle();
binding.zxingView.startSpot();
binding.zxingView.setDelegate(new QRCodeView.Delegate() {
    @Override
    public void onScanQRCodeSuccess(String result) {
        getGoodsInfo(result);
        //扫描得到结果震动一下表示
        vibrate();
        //获取结果后三秒后,重新开始扫描
        new Handler().postDelayed(() ->
                binding.zxingView.startSpot(), 3000);
    }
    @Override
    public void onScanQRCodeOpenCameraError() {
        ToastUtils.showToast(mContext, "打开相机错误,请返回重试~");
    }
});

/**
    * 这里需要加上打开关闭的功能,防止泄露
    */
@Override
protected void onStop() {
    binding.zxingView.stopCamera();
    super.onStop();
}
@Override
protected void onDestroy() {
    binding.zxingView.stopCamera();
    super.onDestroy();
}

//震动
private void vibrate() {
    Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
    vibrator.vibrate(200);
}
    <!-- 相机权限 -->
    <uses-permission android:name="android.permission.CAMERA" />
    <!--震动权限-->
    <uses-permission android:name="android.permission.VIBRATE" />

当然现在提倡的动态申请权限,我们可以集成一个权限的jar包,对于权限进行说明,有兴趣的同学可以去官网详细了解一下,这里附上链接

XXPermissions

//权限管理
api 'com.github.getActivity:XXPermissions:12.2'
XXPermissions.with(this)
        .permission(Permission.CAMERA)
        .request(new OnPermissionCallback() {
            @Override
            public void onGranted(List<String> permissions, boolean all) {
                if (all) {
                    go(ScanGoodsUI.class);
                } else {
                    ToastUtils.showToast(mContext, "没有相机权限无法扫一扫哦~");
                }
            }
            @Override
            public void onDenied(List<String> permissions, boolean never) {
                if (never) {
                    ToastUtils.showToast(mContext, "被永久拒绝授权,请手动授予相机权限");
                    XXPermissions.startPermissionActivity(MainActivity.this, permissions);
                } else {
                    ToastUtils.showToast(mContext, "获取相机权限失败");
                }
            }
        });

zxing其实是比较灵活的,它会支持条形码和二维码的双重扫描,只需要设置一个参数就可以了哦~

//扫条形码
binding.zxingView.changeToScanBarcodeStyle();
条形码
//扫二维码
binding.zxingView.changeToScanQRCodeStyle();
扫二维码
上一篇下一篇

猜你喜欢

热点阅读