Android直播带货系统中如何实现二维码扫描功能

简介: Android直播带货系统中如何实现二维码扫描功能李佳琦的出现将直播带货成功的引向了“巅峰”,为了响应众平台和用户的需求,开发Android直播带货系统成为当下的开发热潮。那么在平时的直播软件中,登录、分享、支付等场景中经常出现扫描二维码的需求。

Android直播带货系统中如何实现二维码扫描功能

李佳琦的出现将直播带货成功的引向了“巅峰”,为了响应众平台和用户的需求,开发Android直播带货系统成为当下的开发热潮。那么在平时的直播软件中,登录、分享、支付等场景中经常出现扫描二维码的需求。接下来就以云豹直播app中的二维码扫描功能为例,跟大家简单分享下怎样搞笑、快捷、稳定的实现这个功能。
目前github上关于Android直播带货系统实现二维码的库最有名的是Google的Zxing,但是Zxing集成复杂,体积大,扫描识别比较慢,而且封装的不好,使用不方便。这里推荐Zbar,Zbar具有识别快,集成方便等优点。
实际开发中我们推荐使用bingoogolapple/BGAQRCode-Android 这个库,这个是对Zbar的进一步封装,集成使用更加方便。

1)首先将这个库集成到项目中

compile 'cn.bingoogolapple:bga-qrcode-zbar:1.3.6'

2)在需要扫码的activity的布局文件中加入

<?xml version="1.0" encoding="utf-8"?>

xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>

<include layout="@layout/view_title"/>

<cn.bingoogolapple.qrcode.zbar.ZBarView
    android:id="@+id/zbarview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:qrcv_animTime="1000"
    app:qrcv_barCodeTipText="将条码放入框内,即可自动扫描"
    app:qrcv_barcodeRectHeight="120dp"
    app:qrcv_borderColor="@android:color/white"
    app:qrcv_borderSize="1dp"
    app:qrcv_cornerColor="@color/colorPrimaryDark"
    app:qrcv_cornerLength="20dp"
    app:qrcv_cornerSize="3dp"
    app:qrcv_customGridScanLineDrawable="@mipmap/custom_grid_scan_line"
    app:qrcv_isAutoZoom="true"
    app:qrcv_isBarcode="false"
    app:qrcv_isOnlyDecodeScanBoxArea="false"
    app:qrcv_isShowDefaultGridScanLineDrawable="true"
    app:qrcv_isShowDefaultScanLineDrawable="true"
    app:qrcv_isShowLocationPoint="true"
    app:qrcv_isShowTipBackground="true"
    app:qrcv_isShowTipTextAsSingleLine="false"
    app:qrcv_isTipTextBelowRect="false"
    app:qrcv_maskColor="#33FFFFFF"
    app:qrcv_qrCodeTipText="将二维码/条码放入框内,即可自动扫描"
    app:qrcv_rectWidth="200dp"
    app:qrcv_scanLineColor="@color/colorPrimaryDark"
    app:qrcv_toolbarHeight="56dp"
    app:qrcv_topOffset="80dp"
    app:qrcv_verticalBias="-1"/>


3)在activity的onCreate方法中初始化扫码控件,并设置扫码回调。
mZBarView = findViewById(R.id.zbarview);
mZBarView.setDelegate(this);

@Override
public void onScanQRCodeSuccess(String result) {
    Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
    vibrator.vibrate(200);
    L.e("扫码", "扫描结果为-----> " + result);
    if (!TextUtils.isEmpty(result)) {
        try {
            JSONObject obj = JSON.parseObject(result);
            String scope = obj.getString("scope");
            if (Constants.QR_CODE_SCOPE.equals(scope)) {
                JSONObject data = obj.getJSONObject("data");
                int type = data.getIntValue("type");
                switch (type) {
                    case 1:
                        String touid = data.getString("uid");
                        if (!TextUtils.isEmpty(touid)) {
                            RouteUtil.forwardUserHome(mContext, touid);
                            finish();
                        }
                        break;
                    case 2:
                        String key = data.getString("key");
                        if (!TextUtils.isEmpty(key)) {
                            MainHttpUtil.loginQrCode(key, new HttpCallback() {
                                @Override
                                public void onSuccess(int code, String msg, String[] info) {
                                    if (code == 0) {
                                        finish();
                                    } else {
                                        ToastUtil.show(msg);
                                        if (mZBarView != null) {
                                            mZBarView.startSpot(); // 重新开始识别
                                        }
                                    }
                                }
                            });
                        }else{
                            if (mZBarView != null) {
                                mZBarView.startSpot(); // 重新开始识别
                            }
                        }
                        break;
                }
            } else {
                ToastUtil.show("无效的二维码");
                if (mZBarView != null) {
                    mZBarView.startSpot(); // 重新开始识别
                }
            }
        } catch (Exception e) {
            ToastUtil.show("无效的二维码");
            if (mZBarView != null) {
                mZBarView.startSpot(); // 重新开始识别
            }
        }
    } else {
        ToastUtil.show("无效的二维码");
        if (mZBarView != null) {
            mZBarView.startSpot(); // 重新开始识别
        }
    }

}

4)在activity的onStart和onStop方法中分别开启和关闭摄像头,并且在onDestory方法中销毁释放摄像头。

@Override
protected void onStart() {
    super.onStart();
    if (mZBarView != null) {
        mZBarView.startCamera(); // 打开后置摄像头开始预览,但是并未开始识别
        mZBarView.startSpotAndShowRect(); // 显示扫描框,并开始识别
    }
}

@Override
protected void onStop() {
    if (mZBarView != null) {
        mZBarView.stopCamera(); // 关闭摄像头预览,并且隐藏扫描框
    }
    super.onStop();
}

@Override
protected void onDestroy() {
    if (mZBarView != null) {
        mZBarView.onDestroy(); // 销毁二维码扫描控件
    }
    mZBarView = null;
    MainHttpUtil.cancel(MainHttpConsts.LOGIN_QR_CODE);
    super.onDestroy();
    L.e("扫码", "onDestroy-----> ");
}
目录
相关文章
|
20天前
|
Android开发
Android开发表情emoji功能开发
本文介绍了一种在Android应用中实现emoji表情功能的方法,通过将图片与表情字符对应,实现在`TextView`中的正常显示。示例代码展示了如何使用自定义适配器加载emoji表情,并在编辑框中输入或删除表情。项目包含完整的源码结构,可作为开发参考。视频演示和源码详情见文章内链接。
45 4
Android开发表情emoji功能开发
|
1天前
|
安全 Android开发 iOS开发
Android vs iOS:探索移动操作系统的设计与功能差异###
【10月更文挑战第20天】 本文深入分析了Android和iOS两个主流移动操作系统在设计哲学、用户体验、技术架构等方面的显著差异。通过对比,揭示了这两种系统各自的独特优势与局限性,并探讨了它们如何塑造了我们的数字生活方式。无论你是开发者还是普通用户,理解这些差异都有助于更好地选择和使用你的移动设备。 ###
7 3
|
2天前
|
安全 搜索推荐 Android开发
深入探索安卓与iOS系统的差异及其对用户体验的影响
在当今的智能手机市场中,安卓和iOS是两大主流操作系统。它们各自拥有独特的特性和优势,为用户提供了不同的使用体验。本文将深入探讨安卓与iOS系统之间的主要差异,包括它们的设计理念、用户界面、应用生态以及安全性等方面,并分析这些差异如何影响用户的使用体验。
|
1天前
|
安全 搜索推荐 Android开发
揭秘iOS与Android系统的差异:一场技术与哲学的较量
在当今数字化时代,智能手机操作系统的选择成为了用户个性化表达和技术偏好的重要标志。iOS和Android,作为市场上两大主流操作系统,它们之间的竞争不仅仅是技术的比拼,更是设计理念、用户体验和生态系统构建的全面较量。本文将深入探讨iOS与Android在系统架构、应用生态、用户界面及安全性等方面的本质区别,揭示这两种系统背后的哲学思想和市场策略,帮助读者更全面地理解两者的优劣,从而做出更适合自己的选择。
|
19天前
|
IDE Android开发 iOS开发
探索安卓与iOS系统的技术差异:开发者的视角
本文深入分析了安卓(Android)与苹果iOS两大移动操作系统在技术架构、开发环境、用户体验和市场策略方面的主要差异。通过对比这两种系统的不同特点,旨在为移动应用开发者提供有价值的见解,帮助他们在不同平台上做出更明智的开发决策。
|
19天前
|
Ubuntu Shell API
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
|
1月前
|
监控 Android开发 iOS开发
深入探索安卓与iOS的系统架构差异:理解两大移动平台的技术根基在移动技术日新月异的今天,安卓和iOS作为市场上最为流行的两个操作系统,各自拥有独特的技术特性和庞大的用户基础。本文将深入探讨这两个平台的系统架构差异,揭示它们如何支撑起各自的生态系统,并影响着全球数亿用户的使用体验。
本文通过对比分析安卓和iOS的系统架构,揭示了这两个平台在设计理念、安全性、用户体验和技术生态上的根本区别。不同于常规的技术综述,本文以深入浅出的方式,带领读者理解这些差异是如何影响应用开发、用户选择和市场趋势的。通过梳理历史脉络和未来展望,本文旨在为开发者、用户以及行业分析师提供有价值的见解,帮助大家更好地把握移动技术发展的脉络。
64 6
|
1月前
|
Dart 开发工具 Android开发
在 Android 系统上搭建 Flutter 环境的具体步骤是什么?
在 Android 系统上搭建 Flutter 环境的具体步骤是什么?
|
1月前
|
Android开发 开发者
Android平台无纸化同屏如何实现实时录像功能
Android平台无纸化同屏,如果需要本地录像的话,实现难度不大,只要复用之前开发的录像模块的就可以,对我们来说,同屏采集这块,只是数据源不同而已,如果是自采集的其他数据,我们一样可以编码录像。
|
Java Android开发 开发者
Android 悬浮窗功能的实现
Android 悬浮窗功能的实现
1341 2
Android 悬浮窗功能的实现