美文网首页
Android的扫一扫功能

Android的扫一扫功能

作者: Poison丶Carson | 来源:发表于2021-09-08 19:07 被阅读0次

    在项目尤其是电商项目,可能会频繁用到扫一扫的功能,这里我们使用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();
    
    扫二维码

    相关文章

      网友评论

          本文标题:Android的扫一扫功能

          本文链接:https://www.haomeiwen.com/subject/zyavwltx.html