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-----> ");
}
目录
相关文章
|
2月前
|
Java Android开发 开发者
Android使用zxing生成二维码
这是一篇关于如何在Android应用中生成二维码的教程。首先,需要导入zxing库的jar包。布局文件中包含一个按钮、一个图片控件和一个输入框。用户可以在输入框中输入想要转换为二维码的内容,点击按钮后,程序会通过实例化QRCodeWriter类并使用for循环绘制二维码图像,最后将生成的二维码显示在ImageView上。源码展示了具体的实现细节,包括布局定义与Java逻辑代码,便于开发者理解和实践。
|
3月前
|
安全 搜索推荐 Android开发
Android系统SELinux安全机制详解
如此看来,SELinux对于大家来说,就像那位不眠不休,严阵以待的港口管理员,守护我们安卓系统的平安,维护这片海港的和谐生态。SELinux就这样,默默无闻,却卫士如山,给予Android系统一份厚重的安全保障。
152 18
|
8月前
|
人工智能 搜索推荐 物联网
Android系统版本演进与未来展望####
本文深入探讨了Android操作系统从诞生至今的发展历程,详细阐述了其关键版本迭代带来的创新特性、用户体验提升及对全球移动生态系统的影响。通过对Android历史版本的回顾与分析,本文旨在揭示其成功背后的驱动力,并展望未来Android可能的发展趋势与面临的挑战,为读者呈现一个既全面又具深度的技术视角。 ####
|
3月前
|
NoSQL 应用服务中间件 PHP
布谷一对一直播源码android版环境配置流程及功能明细
部署需基于 CentOS 7.9 系统,硬盘不低于 40G,使用宝塔面板安装环境,包括 PHP 7.3(含 Redis、Fileinfo 扩展)、Nginx、MySQL 5.6、Redis 和最新 Composer。Swoole 扩展需按步骤配置。2021.08.05 后部署需将站点目录设为 public 并用 ThinkPHP 伪静态。开发环境建议 Windows 操作系统与最新 Android Studio,基础配置涉及 APP 名称修改、接口域名更换、包名调整及第三方登录分享(如 QQ、微信)的配置,同时需完成阿里云与腾讯云相关设置。
|
8月前
|
算法 JavaScript Android开发
|
8月前
|
IDE Java 开发工具
移动应用与系统:探索Android开发之旅
在这篇文章中,我们将深入探讨Android开发的各个方面,从基础知识到高级技术。我们将通过代码示例和案例分析,帮助读者更好地理解和掌握Android开发。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧。让我们一起开启Android开发的旅程吧!
|
7月前
|
监控 Java Android开发
深入探索Android系统的内存管理机制
本文旨在全面解析Android系统的内存管理机制,包括其工作原理、常见问题及其解决方案。通过对Android内存模型的深入分析,本文将帮助开发者更好地理解内存分配、回收以及优化策略,从而提高应用性能和用户体验。
|
8月前
|
监控 Java Android开发
深入探讨Android系统的内存管理机制
本文将深入分析Android系统的内存管理机制,包括其内存分配、回收策略以及常见的内存泄漏问题。通过对这些方面的详细讨论,读者可以更好地理解Android系统如何高效地管理内存资源,从而提高应用程序的性能和稳定性。
321 16
|
7月前
|
存储 安全 Android开发
探索Android系统的最新安全特性
在数字时代,智能手机已成为我们生活中不可或缺的一部分。随着技术的不断进步,手机操作系统的安全性也越来越受到重视。本文将深入探讨Android系统最新的安全特性,包括其设计理念、实施方式以及对用户的影响。通过分析这些安全措施如何保护用户免受恶意软件和网络攻击的威胁,我们希望为读者提供对Android安全性的全面了解。
|
8月前
|
安全 Android开发 iOS开发
深入探讨Android与iOS系统的差异及未来发展趋势
本文旨在深入分析Android和iOS两大移动操作系统的核心技术差异、用户体验以及各自的市场表现,进一步探讨它们在未来技术革新中可能的发展方向。通过对比两者的开放性、安全性、生态系统等方面,本文揭示了两大系统在移动设备市场中的竞争态势和潜在变革。

热门文章

最新文章