Android中二维码扫描的最常用库是zxing和zbar,zxing项目地址为https://github.com/zxing/zxing,目前还有多个人在维护。zbar主要用C来写的,对速度有要求的可使用zbar,但目前没有在维护,项目地址:https://github.com/ZBar/ZBar。

Zxing

之前做毕业设计的时候用到了二维码扫描功能,github上Zxing项目代码很多,但其实用到的只有一部分,由于赶时间所以打算找个精简的快速集成,这里分享一下集成过程,比较实用。

国际惯例,先上效果图:
  

1.引入jar包

2.copy Zxing包到项目


  这里包名不一样肯定会报错,我们暂时不管,先把资源文件copy过来,后面来做处理。

3.导入相关资源文件

copy res底下的相关资源文件,如下:
  drawable、drawable-hdpi和layout
  
  raw文件和values文件
  
 注:values中相关资源不要直接替换,否则会覆盖之前的,需要打开文件将内容加到自己项目对应文件中。

4.AndroidManifest.xml加入相关权限和扫描的Activity
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<activityandroid:name=".zxing.android.CaptureActivity"android:screenOrientation="portrait"android:theme="@android:style/Theme.NoTitleBar" />
5.Clean Projects,修改报错的类

报错无非就是包名不对,修改为自己包名即可
  

6.capture.xml的ViewfinderView改成自己包名下的

7.调起扫描界面 获取扫描结果

在需要打开扫描界面的地方直接跳转到CaptureActivity就OK(使用startActivityForResult)

/*** 跳转到扫码界面扫码*/
private void goScan(){Intent intent = new Intent(MainActivity.this, CaptureActivity.class);startActivityForResult(intent, REQUEST_CODE_SCAN);
}

在onActivityResult的回调中即可获取扫描内容

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);// 扫描二维码/条码回传if (requestCode == REQUEST_CODE_SCAN && resultCode == RESULT_OK) {if (data != null) {//返回的文本内容String content = data.getStringExtra(DECODED_CONTENT_KEY);//返回的BitMap图像Bitmap bitmap = data.getParcelableExtra(DECODED_BITMAP_KEY);}}
}
动态权限申请

由于扫描需要调用相机,打开摄像头属于敏感权限,所以需要进行权限的动态申请,如下

//动态权限申请
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA}, 1);
} else {//扫码goScan();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {switch (requestCode) {case 1:if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {//扫码goScan();} else {Toast.makeText(this, "你拒绝了权限申请,无法打开相机扫码哟!", Toast.LENGTH_SHORT).show();}break;default:}
}

上面的代码就是动态申请权限的流程,首先判断用户是不是已经给我们权限授权了,使用ContextCompat.checkSelfPermission()方法,第一个参数是Context,第二个参数是具体的权限名称,如果等于PackageManager.PERMISSION_GRANTED表明已授权,不等于就是没有授权。
    如果已授权就直接做后面的操作,如果没有授权,需要调用ActivityCompat.requestPermissions()方法申请授权,第一个参数是当前Activity实例,第二个参数是权限数组,第三个是请求码。
    用户的选择将会回调到onRequestPermissionsResult()方法中,授权结果封装在grantResults参数中,如果grantResults长度大于0且grantResults[0]等于PackageManager.PERMISSION_GRANTED,也就是上面权限数组中加入的第一个打开摄像头的权限被授权,则可跳转至扫描界面扫码,否则提示用户未打开权限无法使用。

效果

打开个6.0以上模拟器试试
  

点击按钮将弹出权限申请,用户授权后方可进行二维码扫描。

源码地址:https://download.csdn.net/download/xch_yang/85600502


Android快速实现二维码扫描--Zxing相关推荐

  1. 【Android】条形码/二维码扫描——ZXing源码分析及相关jar包导入

    转载自:http://blog.csdn.net/u010574567/article/details/51916604 *********************1.源码分析************ ...

  2. 快速集成二维码扫描,使用最新版本的zxing(2017.11.10抽取zxing代码)

    github 地址: github.com/maning0303/- ZXingCode 快速集成二维码扫描,使用最新版本的zxing代码提取(2017.11.10) 功能: 1:生成二维码(带Log ...

  3. android利用zbar二维码扫描-(解决中文乱码及扫描区域定义)

    写在最前(这是对上一篇博文的问题做的更新[android利用zbar二维码扫描]) project下载   zbarLib编译project  project下载0积分 bug 在2.3的系统中Hol ...

  4. [转载]android利用zbar二维码扫描-(解决中文乱码及扫描区域定义)

    写在最前(这是对上一篇博文的问题做的更新[android利用zbar二维码扫描]) 前天早上登陆CSDN时候一条消息:一网友提出了两点疑惑 扫描框目前只是做的假象,是全屏的图片进行解析 中文乱码现象 ...

  5. Android实现一维二维码扫描生成功能(一)-zxing导入现有项目

    前言 目前二维码扫描功能很流行也非常成熟了,而zxing项目也是目前可以说是最流行的二维码扫描方面的开源项目了,很多大神都对zxing进行了封装,github上也有很多好用的二维码开源库,但是我更喜欢 ...

  6. 解决Android二维码扫描ZXing竖屏拉伸变长闪退扫描区域小等问题

    Android 基于google Zxing实现二维码.条形码扫描,仿微信二维码扫描效果 这篇文章写的不错,但是按照这篇文章使用二维码的话会出现竖屏扫描图像拉伸变长的问题(有一个地方计算错误),解决拉 ...

  7. Android 9 实现二维码扫描处理(BGAQRCode-Android) 笔记

    首先声明,本笔记是在下面这位大佬的代码基础上改的,本人会将实现过程中出现的问题和经验写在下面,本笔记可以结合github上作者的readme一起看: https://github.com/bingoo ...

  8. 二维码扫描ZXing简化

    最近项目中有需要用到二维码扫描功能,于是查了相关资料,也没有过多地研究ZXing源码,只是有了最简单的功能,因为下载大牛的demo已经完全实现了功能,只是对其中的扫描线做了更改,需要的朋友可以直接使用 ...

  9. Android 应用之二维码扫描登录

    下面介绍二维码扫描登录原理, 首先需要web服务端,和app客户端. web服务端主要工作是生成二维码,检测客户端提交信息正确性,更新网页界面. app客户端主要工作是扫描二维码,提交账户信息(此不是 ...

最新文章

  1. ㉔云上场景:瑞云科技,支持Render cloud的超强计算
  2. c语言使用数组计算最大数。_程序设计入门——C语言_浙江大学_第10次开课
  3. Flutter入门:application、module、package、plugin
  4. vue-cli 3.0 跨域请求代理
  5. 矢量合成和分解的法则_力的合成与分解专题解析,寒假复习!
  6. 两千内给力的大屏手机(二)
  7. RxJava之PublishSubject、BehaviorSubject、ReplaySubject和AsyncSubject
  8. Beta版本测试报告以及Beta版本发布说明
  9. html css没有反应,只有CSS和HTML的标签没有正确响应
  10. python 卷积神经网络 应用_卷积神经网络在目标定位中的应用
  11. linux网页视频黑边,ffmpeg去除视频黑边命令
  12. 关于软件工程的课程建议
  13. Pycharm主题基本设置
  14. Word和WPS插件开发总结
  15. 安装“万能解码器”还原真实“解码”
  16. Sublime 设置中文方法
  17. DataPipeline王睿:业务异常实时自动化检测 — 基于人工智能的系统实战
  18. Summary——CrowdPose: Efficient Crowded Scenes Pose Estimation and A New Benchmark
  19. 《Photoshop蒙版与合成(第2版)》—第1章合成的历史
  20. 怎样用python定位别人在哪_python程序员教你用微信给对方定位!你说回家!却还在外面鬼混?...

热门文章

  1. 用*打印出三角形,棱形
  2. 一个本科生去面试算法工程师自取其辱的故事
  3. easychallenge
  4. #21天学习挑战赛#Python入门之mac安装第三方模块——详细教程
  5. 卧兔操刀,头部游戏公司莉莉丝出海,红人营销仅10天数据翻一倍
  6. 总结:基于AIOPS的异常告警判断
  7. 一、论文格式——分隔符和页码设置
  8. vb.net设置分辨率和缩放比例_【华鹏客服维修部】配置高不一定性能强,Win 10做好这些设置才能“6到飞起”!...
  9. 【数字图像处理】期末考试备考复习宝典 (一文搞定,期末考试不再担忧)
  10. 人类对于人工智能的担忧来源于什么(下)