实现效果:

实现步骤:

1.Gradle添加二维码包引用。

implementation 'cn.bingoogolapple:bga-qrcode-zbar:1.3.7'

添加好后,点击右上角的“Sync Now”

2.AndroidManifest.xml 增加相关权限配置。

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

3.测试Activity代码:page_qr.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:layout_marginBottom="50dp"android:orientation="vertical"><cn.bingoogolapple.qrcode.zbar.ZBarViewandroid:id="@+id/zbarview"android:layout_width="200dp"android:layout_height="200dp"android:layout_gravity="center"android:layout_marginTop="20dp"android:layout_marginBottom="40dp"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_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="true"app:qrcv_maskColor="#33FFFFFF"app:qrcv_qrCodeTipText="扫码二维吗"app:qrcv_rectWidth="200dp"app:qrcv_scanLineColor="@color/colorPrimaryDark"app:qrcv_toolbarHeight="0dp"app:qrcv_topOffset="0dp"app:qrcv_verticalBias="-1" /><Buttonandroid:id="@+id/start_spot"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:text="开始扫码" /><Buttonandroid:id="@+id/stop_spot"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:text="暂停扫码" /><Buttonandroid:id="@+id/open_flashlight"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:text="开灯" /><Buttonandroid:id="@+id/close_flashlight"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:text="关灯" /><TextViewandroid:id="@+id/txtText"android:layout_width="match_parent"android:layout_height="wrap_content" />
</LinearLayout>

注意:顶部申明许加上 xmlns:app="http://schemas.android.com/apk/res-auto" 这是自定义控件需要申明的命名空间。

4.后置代码 Page_QR.java

package com.example.rc114.ui;import android.Manifest;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Vibrator;
import android.provider.Settings;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;import com.example.rc114.R;import java.util.ArrayList;
import java.util.List;import cn.bingoogolapple.qrcode.core.QRCodeView;
import cn.bingoogolapple.qrcode.zbar.ZBarView;public class Page_QR extends AppCompatActivity {QRCodeView qrCodeView;String[] permissions = new String[]{Manifest.permission.CAMERA,Manifest.permission.VIBRATE};private final int permissionCode = 100;//权限请求码//检查权限private void checkPermission() {List<String> permissionList = new ArrayList<>();for (int i = 0; i < permissions.length; i++) {if (ContextCompat.checkSelfPermission(this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {permissionList.add(permissions[i]);}}if (permissionList.size() <= 0) {//说明权限都已经通过,可以做你想做的事情去bindEvent();} else {//存在未允许的权限ActivityCompat.requestPermissions(this, permissions, permissionCode);}}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);boolean haspermission = false;if (permissionCode == requestCode) {for (int i = 0; i < grantResults.length; i++) {if (grantResults[i] == -1) {haspermission = true;}}if (haspermission) {//跳转到系统设置权限页面,或者直接关闭页面,不让他继续访问permissionDialog();} else {//全部权限通过,可以进行下一步操作bindEvent();}}}AlertDialog alertDialog;//打开手动设置应用权限private void permissionDialog() {if (alertDialog == null) {alertDialog = new AlertDialog.Builder(this).setTitle("提示信息").setMessage("当前应用缺少必要权限,该功能暂时无法使用。如若需要,请单击【确定】按钮前往设置中心进行权限授权。").setPositiveButton("设置", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {cancelPermissionDialog();Uri packageURI = Uri.parse("package:" + getPackageName());Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, packageURI);startActivity(intent);}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {cancelPermissionDialog();}}).create();}alertDialog.show();}private void cancelPermissionDialog() {alertDialog.cancel();}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.page_qr);//6.0才用动态权限if (Build.VERSION.SDK_INT >= 23) {checkPermission();} else {bindEvent();}}private void bindEvent() {qrCodeView = (ZBarView) findViewById(R.id.zbarview);qrCodeView.setDelegate(new QRCodeView.Delegate() {@Overridepublic void onScanQRCodeSuccess(String result) {vibrate();//震动手机//扫描成功后处理事件Toast.makeText(Page_QR.this, result, Toast.LENGTH_SHORT).show();qrCodeView.startSpot();//继续扫描TextView txtText = (TextView) findViewById(R.id.txtText);txtText.setText(result);}@Overridepublic void onCameraAmbientBrightnessChanged(boolean isDark) {// 这里是通过修改提示文案来展示环境是否过暗的状态,接入方也可以根据 isDark 的值来实现其他交互效果String tipText = qrCodeView.getScanBoxView().getTipText();String ambientBrightnessTip = "\n环境过暗,请打开闪光灯";if (isDark) {if (!tipText.contains(ambientBrightnessTip)) {qrCodeView.getScanBoxView().setTipText(tipText + ambientBrightnessTip);}} else {if (tipText.contains(ambientBrightnessTip)) {tipText = tipText.substring(0, tipText.indexOf(ambientBrightnessTip));qrCodeView.getScanBoxView().setTipText(tipText);}}}@Overridepublic void onScanQRCodeOpenCameraError() {Toast.makeText(Page_QR.this, "错误", Toast.LENGTH_SHORT).show();}});qrCodeView.startCamera();findViewById(R.id.start_spot).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {onStart();Toast.makeText(Page_QR.this, "开始扫码", Toast.LENGTH_SHORT).show();}});findViewById(R.id.stop_spot).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {onStop();Toast.makeText(Page_QR.this, "停止扫码", Toast.LENGTH_SHORT).show();}});findViewById(R.id.open_flashlight).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {qrCodeView.openFlashlight();Toast.makeText(Page_QR.this, "打开闪光灯", Toast.LENGTH_SHORT).show();}});findViewById(R.id.close_flashlight).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {qrCodeView.closeFlashlight();Toast.makeText(Page_QR.this, "关闭闪光灯", Toast.LENGTH_SHORT).show();}});}@Overrideprotected void onStart() {super.onStart();qrCodeView.startCamera();//打开后置摄像头开始预览,但是并未开始识别qrCodeView.startSpotAndShowRect(); // 显示扫描框,并开始识别//        mQRCodeView.showScanRect();//显示扫描框
//        mQRCodeView.startSpot();//开始识别二维码//mQRCodeView.openFlashlight();//开灯//mQRCodeView.closeFlashlight();//关灯}@Overrideprotected void onStop() {qrCodeView.stopCamera();// 关闭摄像头预览,并且隐藏扫描框super.onStop();}@Overrideprotected void onDestroy() {qrCodeView.onDestroy();super.onDestroy();}private void vibrate() {Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);vibrator.vibrate(200);}}

参考:Android二维码扫描——BGAQRCode-Android - 简书

Android 集成二维码扫描功能-zbar相关推荐

  1. Android实现二维码扫描功能(一)ZXing插件接入

    简介 关于Android扫描二维码的功能实现,网上有很多相关资料.在对比之后,选用了前辈了修改过的ZXing直接接入到项目中,特制作此demo,介绍整个过程. (最新更新)本篇文章讲解的接入方法对部分 ...

  2. Android实现二维码扫描功能(四)-ZXing识别图片二维码,相册选图

    简介 上一篇 Android实现二维码扫描功能(三)-闪光灯控制介绍了光线较弱情况下开启闪光灯来辅助二维码识别的方法. 本篇我们介绍如何识别相册中的图片(含二维码) 动态演示 使用模拟器录制了动画演示 ...

  3. Android实现二维码扫描功能-ZXing识别图片二维码,相册选图

    文章目录 1.演示 2.权限问题 3.实现步骤 4.工具类 5.图片Uri处理(重要更新) 1.演示 2.权限问题 部分朋友在打开相册时遇到读写权限未授权的问题,我在开发的时候没有遇到,也没有注册读写 ...

  4. Android实现二维码扫描功能(三)-闪光灯控制

    本篇我们对光线暗淡情况下闪光灯的使用做出介绍. 效果 晚上测试时: 开灯后: 未开灯: 实现步骤 1.在activity_scanner.xml界面上加上闪光灯开关按钮.可以是Button.Check ...

  5. Android项目如何集成ZXing二维码扫描功能

    最近的项目有二维码扫描跳转网页的需求,就是利用手机摄像头,扫描并解析二维码内容,内容由生成二维码的时候定义,我项目现在的需求就是一个包含了网址的二维码,网上有生成二维码的工具,也可以自己开发一个. 搜 ...

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

    自李佳琦的出现将直播带货成功的引向了"巅峰",为了响应众平台和用户的需求,开发Android直播带货系统成为当下的开发热潮.那么在平时的直播软件中,登录.分享.支付等场景中经常出现 ...

  7. 使用安卓实现一个二维码扫描功能(基于Android Studio)

    二维码扫描使用很广泛,在这里记录二维码扫描的功能,需要导入第三方的类库. 步骤一:在项目中导入第三方的类库,导入方法:往Android Studio中导入第三方类库文件这篇博客中有详细记录 步骤二:定 ...

  8. 2022-02-18 Android app 二维码扫描demo,用zxing库,实测ok,记录一下所参考有价值的文章,有生成二维码的demo,但没有亲测。

    一.Android中二维码扫描的最常用库是zxing和zbar,这里用zxing. 二.实测效果图,扫描完成后会以Toast方式显示结果. 三.测试代码的架构 四.代码不细说,想看源码的可以downl ...

  9. 二维码扫描利用ZBar实现

    上次是根据系统的属性自己封装的一个二维码扫描,这次给大家介绍一下基于ZBar集成的类似于QQ二维码扫描界面的二维码扫描的效果.                                     ...

最新文章

  1. 使用unix工具监控cpu、内存等系统资源占用率
  2. R语言dplyr包排序及序号函数实战(row_number、ntile、min_rank、dense_rank、percent_rank、cume_dist)
  3. 阿里发布2019十大科技趋势:AI依然最热
  4. Cannot load onnxruntime.capi. Error: DLL load failed: 找不到指定的模块
  5. dos删除文件与文件夹
  6. 【RFID】基于MATLAB的RFID 系统的空中接口过程以及防碰撞算法仿真
  7. Crawler/ML:爬虫技术(基于urllib.request库从网页获取图片)+HierarchicalClustering层次聚类算法,实现自动从网页获取图片然后根据图片色调自动分类
  8. ios CGRec用法
  9. 替换元素_80%的前端会答错的问题:lt;imggt;是什么元素?
  10. VS设置程序启动权限为管理员权限
  11. 【Flink】Flink 不支持部分 task 结束后进行 checkpoint
  12. Failed to load ApplicationContext
  13. jQuery实现Ajax
  14. 本次安装visual studio所用的安装程序不完整_阁楼影院安装案例
  15. 没有ajax以前的隐藏 iframe 技术
  16. 深入理解java虚拟机笔记之一
  17. 线性代数学习之正交性,标准正交矩阵和投影
  18. 编程c 语言怎么表示倍数,C语言里怎么表示是3的倍数
  19. AM335x Linux调试1--MLO中打印寄存器值
  20. sram是靠什么存储信息

热门文章

  1. chromedriver一个用selenium完成爬虫的例子
  2. Python从入门到入魔 葵花宝典指南分享
  3. 点滴关怀PHP面试,真帮实干显真情 点滴关怀暖人心
  4. Liunx mysql 安装
  5. yolov5 参数使用
  6. 北京安全员A证怎么考多选题库
  7. 35岁的前端开发工程师,未来路在何方?
  8. 使用Flex布局实现携程APP首页布局
  9. 苹果电脑安装Windows系统完整教程,新手快速解决装系统问题
  10. 深度学习算法优化系列十八 | TensorRT Mnist数字识别使用示例