Android端直播app源码快速读取特定信息的解决方案
为了在云豹直播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