【转】 Android 基于google Zxing实现对手机中的二维码进行扫描--不错
原文网址:http://blog.csdn.net/xiaanming/article/details/14450809
转载请注明出处:http://blog.csdn.net/xiaanming/article/details/14450809
我之前写了一篇关于google Zxing扫描二维码的文章,效果是仿微信的效果,有兴趣的朋友可以去看看基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果,有时候我们有这样子的需求,需要扫描手机中有二维码的的图片,所以今天实现的就是对手机中的二维码图片进行扫描,我这里是直接在原来的工程上面加的这个功能,下面就简单介绍下这个小功能的实现,首先我在界面上加了一个ImageButton,图片还是用的微信的图片,下面是扫描界面的title
- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:background="@drawable/mmtitle_bg_alpha" >
- <Button
- android:id="@+id/button_back"
- android:layout_width="75.0dip"
- android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
- android:background="@drawable/mm_title_back_btn"
- android:text="返回"
- android:textColor="@android:color/white" />
- <TextView
- android:id="@+id/textview_title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerHorizontal="true"
- android:layout_centerVertical="true"
- android:gravity="center_vertical"
- android:text="二维码扫描"
- android:textColor="@android:color/white"
- android:textSize="18sp" />
- <ImageButton
- android:id="@+id/button_function"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentRight="true"
- android:layout_marginRight="2dip"
- android:background="@drawable/mm_title_right_btn"
- android:minWidth="70dip"
- android:src="@drawable/mm_title_btn_menu_normal" />
- </RelativeLayout>
在扫描界面MipcaActivityCapture对ImageButton对其点击监听,点击ImageButton从手机中选择图片
- //打开手机中的相册
- Intent innerIntent = new Intent(Intent.ACTION_GET_CONTENT); //"android.intent.action.GET_CONTENT"
- innerIntent.setType("image/*");
- Intent wrapperIntent = Intent.createChooser(innerIntent, "选择二维码图片");
- this.startActivityForResult(wrapperIntent, REQUEST_CODE);
在这里使用了startActivityForResult来跳转界面,当我们选中含有二维码的图片的时候会回调MipcaActivityCapture的onActivityResult方法,我们需要在onActivityResult方法里面解析图片中的二维码
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if(resultCode == RESULT_OK){
- switch(requestCode){
- case REQUEST_CODE:
- //获取选中图片的路径
- Cursor cursor = getContentResolver().query(data.getData(), null, null, null, null);
- if (cursor.moveToFirst()) {
- photo_path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
- }
- cursor.close();
- mProgress = new ProgressDialog(MipcaActivityCapture.this);
- mProgress.setMessage("正在扫描...");
- mProgress.setCancelable(false);
- mProgress.show();
- new Thread(new Runnable() {
- @Override
- public void run() {
- Result result = scanningImage(photo_path);
- if (result != null) {
- Message m = mHandler.obtainMessage();
- m.what = PARSE_BARCODE_SUC;
- m.obj = result.getText();
- mHandler.sendMessage(m);
- } else {
- Message m = mHandler.obtainMessage();
- m.what = PARSE_BARCODE_FAIL;
- m.obj = "Scan failed!";
- mHandler.sendMessage(m);
- }
- }
- }).start();
- break;
- }
- }
- }
我们先通过图片的Uri获取图片的路径,然后根据图片的路径扫描出图片里面的二维码内容,这将解码图片放在了一个子线程中,主要是防止因为解析太久而出现ARN的情况
接下来看scanningImage(String path) 方法,zxing.jar中提供了对二维码进行解析的类QRCodeReader.java,使用decode(BinaryBitmap image, Map<DecodeHintType, ?> hints)方法就能解析出图片里面的二维码信息,下面是通过图片的路径解析出里面的二维码内容
- /**
- * 扫描二维码图片的方法
- * @param path
- * @return
- */
- public Result scanningImage(String path) {
- if(TextUtils.isEmpty(path)){
- return null;
- }
- Hashtable<DecodeHintType, String> hints = new Hashtable<DecodeHintType, String>();
- hints.put(DecodeHintType.CHARACTER_SET, "UTF8"); //设置二维码内容的编码
- BitmapFactory.Options options = new BitmapFactory.Options();
- options.inJustDecodeBounds = true; // 先获取原大小
- scanBitmap = BitmapFactory.decodeFile(path, options);
- options.inJustDecodeBounds = false; // 获取新的大小
- int sampleSize = (int) (options.outHeight / (float) 200);
- if (sampleSize <= 0)
- sampleSize = 1;
- options.inSampleSize = sampleSize;
- scanBitmap = BitmapFactory.decodeFile(path, options);
- RGBLuminanceSource source = new RGBLuminanceSource(scanBitmap);
- BinaryBitmap bitmap1 = new BinaryBitmap(new HybridBinarizer(source));
- QRCodeReader reader = new QRCodeReader();
- try {
- return reader.decode(bitmap1, hints);
- } catch (NotFoundException e) {
- e.printStackTrace();
- } catch (ChecksumException e) {
- e.printStackTrace();
- } catch (FormatException e) {
- e.printStackTrace();
- }
- return null;
- }
Result是封装了解码的条码图像内的结果,我们只需要通过Result的getText()方法就能取出里面的二维码内容,这样子我们就搞定了扫描手机中的二维码图片的小功能,接下来我们运行下项目,看看效果
有疑问的朋友可以在下面留言,我会为大家解答,源码里是在之前的效果里面新添加的功能,有兴趣的朋友可以下载源码看看
很多朋友下了demo发现出现Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lcom/google/zxing/BarcodeFormat;这个错误,是因为刚开始的时候我放了两个JAR包进去,删除一个就行了,大家自行修改
【转】 Android 基于google Zxing实现对手机中的二维码进行扫描--不错的更多相关文章
- Android 基于google Zxing实现对手机中的二维码进行扫描
转载请注明出处:http://blog.csdn.net/xiaanming/article/details/14450809 有时候我们有这样子的需求,需要扫描手机中有二维码的的图片,所以今天实现的 ...
- C#+ZXing.dll生成手机路径导航二维码
1.原谅我先写点废话哈 这两天用C#写一个C端的软件,甲方提出一个很无理的需求(在C端的程序中实现路径导航,关键是这个程序最终是运行在物理隔绝的电脑上的……),头疼了好几天,领导突然想到可以把坐标+百 ...
- Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果
Android 高手进阶(21) 版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请注明出处:http://blog.csdn.net/xiaanming/article/detail ...
- 【转】Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果--不错
原文网址:http://blog.csdn.net/xiaanming/article/details/10163203 转载请注明出处:http://blog.csdn.net/xiaanming/ ...
- Android高级控件(三)—— 使用Google ZXing实现二维码的扫描和生成相关功能体系
Android高级控件(三)-- 使用Google ZXing实现二维码的扫描和生成相关功能体系 摘要 现在的二维码可谓是烂大街了,到处都是二维码,什么都是二维码,扫一扫似乎已经流行到习以为常了,今天 ...
- Android高级控件(三)—— 使用Google ZXing实现二维码的扫描和生成相关功能体系
Android高级控件(三)-- 使用Google ZXing实现二维码的扫描和生成相关功能体系 摘要 如今的二维码可谓是烂大街了.到处都是二维码.什么都是二维码,扫一扫似乎已经流行到习以为常了,今天 ...
- 【转】Android手机客户端关于二维码扫描的源码--不错
原文网址:https://github.com/SkillCollege/QrCodeScan QrCodeScan 这是Android手机客户端关于二维码扫描的源码,使用了高效的ZBar解码库,并修 ...
- 基于zxing的二维码(网格)扫描
基于zxing的二维码(网格)扫描 前言:对于二维码扫描我们使用的是开源框架Zxing或者Zbar,这里使用基于zxing的二维码扫描,类似支付宝网格扫描, 二维码原理介绍: 二维码是用某种特定的几何 ...
- android 使用开源库zxing生成二维码,扫描二维码【转】
转自:http://blog.csdn.net/qq_16064871/article/details/52422723 zxing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库 ...
随机推荐
- [AngularJS] 5 simple ways to speed up your AngularJS application
Nowdays, Single page apps are becoming increasingly popular among the fornt-end developers. It is th ...
- const中的一些tricky的地方
1. 为了逻辑上的优化需要,const成员函数可能想修改某些成员变量,把这些成员变量定义为mutable可以绕过const的检查 2. 调用const和non-const的参数的函数可以重载 3. s ...
- [转] Linux中gcc,g++常用编译选项
http://blog.sina.com.cn/s/blog_5ff2a8a201011ro8.html gcc/g++ 在执行编译时,需要4步 1.预处理,生成.i的文件[使用-E参数] 2.将预处 ...
- codevs愚蠢的矿工(树形DP)
/* 树形DP 根节点一定有人 然后 剩下的人没到每个孩子去 因为孩子数可能很多 不好枚举 所以转二叉树 分两部分 O(sum)就可以了 当然 转二叉树候必须顾及原来树的一些性质 如不能只选左孩子 转 ...
- 简单html以及css的用法
我将利用三天的时间来完成制作京东首页的静态页面效果,其中包含的内容有html以及css. 1.在开发进行之前,首先要配置开发环境:我们需要安装sublime webstorm vscode Hb ...
- PC端手机访问跳转手机站点
第一种: var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.sr ...
- (转)ThinkPHP自定义标签
第一:在当前应用下的Conf文件夹中config.php加两个配制项: 'TAGLIB_LOAD' => true,//加载标签库打开 'APP_ ...
- Sqlserver2005手动备份远程数据库到本地数据库方法
1,在本地数据库中新建一个数据库名,如local 选中local,鼠标右键,任务,导入数据 2下一步: 注意:服务器名称写远程连接的主机的IP, 数据库选中你要备份的远程数据库. 3下一步: 注意:服 ...
- [转] 详细整理:UITableView优化技巧
原文:http://www.cocoachina.com/ios/20150602/11968.html 最近在微博上看到一个很好的开源项目VVeboTableViewDemo,是关于如何优化 ...
- 【C#学习笔记】一、基础知识
1.1数据类型(P43) 类型 别名 允许的值 sbyte System.SByte -128~127 byte System.Byte 0~255 short System.Int16 -32768 ...