Android端直播app源码快速读取特定信息的解决方案

发布来源:云豹科技
发布人:云豹科技
2021-06-02 10:07:30

为了在云豹直播app源码中实现快速读取特定信息,并进行展示或验证的功能,最流行的解决方式非“扫描二维码”莫属。这种方式,不需要用户使用复杂的记忆跟逻辑,只需轻轻一扫,便能实现需求,在各类app中非常常用。

所以,今天来简单地介绍下在Android直播app源码中,如何快速实现显示二维码扫描并读取信息的功能

这里要介绍下,目前Android官方谷歌有自己的二维码扫描库,但是使用起来并不方便,故此在这里介绍一下云豹科技正在使用的二维码扫描库,该库在云豹直播app源码云豹短视频源码、云豹陪玩源码、云豹语音社交源码中均有使用——“BGAQRCode-Android”,它可以实现基本的生成二维码、扫描二维码、识别图片二维码的功能

接下来介绍一下再代码层面如何使用:

首先,把 maven { url 'https://jitpack.io' } 添加到 root build.gradle 的 repositories 中

在 app build.gradle 中添加如下依赖,末尾的「latestVersion」指的是最新版本该库的最新版本名称,请自行替换

ZXing版本:


dependencies {
  Implementation 'com.github.bingoogolapple.BGAQRCode-Android:zxing:latestVersion'
}


ZBar版本


dependencies {
   implementation 'com.github.bingoogolapple.BGAQRCode-Android:zbar:latestVersion'
}


Ps:由于两个版本的侧重点不同,故提供两个版本。

然后,就是在布局文件中的使用,由于笔者习惯用ZXing版,所以下面的代码都是ZXing版的使用方法:


ZXing:


<cn.bingoogolapple.qrcode.zxing.ZXingView
android:id="@+id/zxingview"
style="@style/MatchMatch"
app:qrcv_animTime="1000"
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_maskColor="#33FFFFFF"
app:qrcv_rectWidth="200dp"
 app:qrcv_scanLineColor="@color/colorPrimaryDark"
  app:qrcv_scanLineSize="1dp"
 app:qrcv_topOffset="90dp" />


常用到的方法有:


/**
 * ZXingView 设置识别的格式。详细用法请看 zxingdemo TestScanActivity 中的 onClick 方法
 *
 * @param barcodeType 识别的格式
 * @param hintMap     barcodeType 为 BarcodeType.CUSTOM 时,必须指定该值
 */
public void setType(BarcodeType barcodeType, Map<DecodeHintType, Object> hintMap)
 
/**
 * 设置扫描二维码的代理
 *
 * @param delegate 扫描二维码的代理
 */
public void setDelegate(Delegate delegate)
 
/**
 * 显示扫描框
 */
public void showScanRect()
 
/**
 * 隐藏扫描框
 */
public void hiddenScanRect()
 
/**
 * 打开后置摄像头开始预览,但是并未开始识别
 */
public void startCamera()
 
/**
 * 打开指定摄像头开始预览,但是并未开始识别
 *
 * @param cameraFacing  Camera.CameraInfo.CAMERA_FACING_BACK or Camera.CameraInfo.CAMERA_FACING_FRONT
 */
public void startCamera(int cameraFacing)
 
/**
 * 关闭摄像头预览,并且隐藏扫描框
 */
public void stopCamera()
 
/**
 * 开始识别
 */
public void startSpot()
 
/**
 * 停止识别
 */
public void stopSpot()
 
/**
 * 停止识别,并且隐藏扫描框
 */
public void stopSpotAndHiddenRect()
 
/**
 * 显示扫描框,并开始识别
 */
public void startSpotAndShowRect()
 
/**
 * 打开闪光灯
 */
public void openFlashlight()
 
/**
 * 关闭散光灯
 */
public void closeFlashlight()
 
/**
 * 解析本地图片二维码。返回二维码图片里的内容 或 null
 *
 * @param picturePath 要解析的二维码图片本地路径
 */
public void decodeQRCode(String picturePath)
 
/**
 * 解析 Bitmap 二维码。返回二维码图片里的内容 或 null
 *
 * @param bitmap 要解析的二维码图片
 */
public void decodeQRCode(Bitmap bitmap)
QRCodeView.Delegate 扫描二维码的代理
 
/**
 * 处理扫描结果
 *
 * @param result 摄像头扫码时只要回调了该方法 result 就一定有值,不会为 null。解析本地图片或 Bitmap 时 result 可能为 null
 */
void onScanQRCodeSuccess(String result)
 
/**
 * 摄像头环境亮度发生变化
 *
 * @param isDark 是否变暗
 */
void onCameraAmbientBrightnessChanged(boolean isDark);
 
/**
 * 处理打开相机出错
 */
void onScanQRCodeOpenCameraError()


在云豹直播app源码中,实际代码为:


private ZXingView mZXingView;
 mZXingView.startCamera(); // 打开后置摄像头开始预览,但是并未开始识别
//        mZXingView.startCamera(Camera.CameraInfo.CAMERA_FACING_FRONT); // 打开前置摄像头开始预览,但是并未开始识别
        mZXingView.startSpotAndShowRect(); // 显示扫描框,并开始识别
 
 @Override
    public void onScanQRCodeSuccess(final String result) {
//扫描出的结果使个字符串,然后根据需要对字符串进行操作
        L.e(TAG, "result:" + result);
        if (TextUtils.isEmpty(result)){
            ToastUtil.show(WordUtil.getString(R.string.qr_code_9));
            return;
        }
        String prefix = "uid=";
        if (result.startsWith(prefix)){
            final String toUid  = result.substring(prefix.length()); 
        }
//        vibrate();
//        mZXingView.startSpot(); // 开始识别
    }
 
    @Override
    protected void onResume() {
        super.onResume();
        startScan();
    }
 
    @Override
    public void onCameraAmbientBrightnessChanged(boolean isDark) {
        // 这里是通过修改提示文案来展示环境是否过暗的状态,接入方也可以根据 isDark 的值来实现其他交互效果
        String tipText = mZXingView.getScanBoxView().getTipText();
        String ambientBrightnessTip = "\n环境过暗,请打开闪光灯";
//        L.e(TAG,"isDark--->"+isDark);
    }
 
    @Override
    public void onScanQRCodeOpenCameraError() {
        L.e(TAG, "打开相机出错");
    }


最后,使用完别忘记销毁:


mZXingView.onDestroy(); // 销毁二维码扫描控件


以上就是本文全部内容,如需购买云豹直播app源码,或咨询相关事宜,欢迎联系云豹科技。

声明:以上内容为云豹科技作者本人原创,未经作者本人同意,禁止转载,否则将追究相关法律责任www.yunbaokj.com

声明:
以上内容为云豹科技作者本人原创,未经作者本人同意,禁止转载,否则将追究相关法律责任