`
dawuafang
  • 浏览: 1192011 次
文章分类
社区版块
存档分类
最新评论

Android 基于google Zxing实现对手机中的二维码进行扫描

 
阅读更多

转载请注明出处: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实现二维码、条形码扫描"就是这样一个示例,它旨在模仿微信的二维码扫描体验,让用户能够快速、方便地读取和识别二维码或条形码信息。 Zxing,又称为“二维码解码器”,是由Google...

    Android 基于google Zxing实现对手机中的二维码进行扫描 程序源码

    这里我们将深入探讨如何基于Google的Zxing库在Android应用中实现二维码扫描功能。 Zxing,全称为“ZXing (Zebra Crossing)”,是一个开源的、多平台的条码读取库。它支持多种条码格式,包括QR码、Data Matrix、UPC...

    基于谷歌ZXing实现的快速扫描二维码条码的app

    **基于谷歌ZXing实现的快速扫描二维码条码的APP** 谷歌ZXing(Zebra Crossing)是一个开源项目,专门用于处理各种一维和二维条码,包括但不限于二维码和条形码。在Android平台上,ZXing库为开发者提供了强大的条码...

    Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果

    在这个项目中,我们将学习如何基于Zxing在Android上实现一个类似微信的二维码扫描器。 首先,我们要在Android工程中集成Zxing。可以通过添加Zxing的Gradle依赖或下载其源码导入项目。如果是通过Gradle,可以在build...

    android 二维码扫描Zxing

    本文将详细介绍如何在Android应用中集成ZXing实现二维码扫描功能,并提供对源码的修改建议。 首先,我们需要了解ZXing库的基本结构和功能。ZXing库包含了二维码和条形码的编码与解码核心模块,支持多种格式,如QR ...

    在Android Studio中集成Zxing实现条形码和二维码的扫描

    在Android开发中,集成Zxing库能够方便地实现在移动设备上扫描和解析条形码与二维码的功能。Zxing,全称"ZXing"(意为"zebra crossing",斑马线),是一个开源的、跨平台的条码读取库,支持多种格式的条码和二维码。...

    基于google Zxing实现二维码条形码扫描仿微信二维码扫描实例代码

    在Android开发中,实现二维码和条形码的扫描功能是一个常见的需求,比如微信中的二维码扫描。Google提供的ZXing(Zebra Crossing)库就是一个强大的开源工具,可以方便地集成到Android应用中,帮助开发者实现这样的...

    基于google Zxing实现二维码 扫描

    本篇文章将详细介绍如何在Android应用中集成ZXing,实现二维码扫描功能。 1. **ZXing简介** ZXing,意为“斑马线”,是一个开源项目,提供了多种格式的一维和二维条码的读取、生成以及解码功能。它支持包括QR码、...

    Android基于google Zxing实现二维码的生成

    总的来说,Android基于ZXing实现二维码生成的过程包括:集成ZXing库、创建二维码图像、在界面上展示二维码以及处理用户交互,如长按识别。通过这种方式,开发者可以轻松地在Android应用中集成二维码功能,提高用户...

    Android zxing二维码扫描 从相册选择二维码识别

    在"Android zxing二维码扫描 从相册选择二维码识别"这个主题中,我们将深入探讨如何利用ZXing库实现在Android应用中进行二维码的扫描和识别,以及如何从相册选取图片进行识别。 首先,为了在Android应用中使用ZXing...

    demo Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果

    基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果,这里是实例代码,项目详情http://blog.csdn.net/qq_21445563/article/details/50856305

    高仿仿微信界面二维码扫描效果 之 Android 基于google Zxing实现二维码、条形码扫描

    在Android开发中,实现二维码和条形码扫描功能是一个常见的需求。Google的Zxing库,全称为"Zebra Crossing",是一个开源项目,为多种格式的一维和二维条码提供读取、解码功能。本教程将深入探讨如何利用Zxing库在...

    delphi android 调用Zxing3.3.3 仿微信扫二维码、条形码

    在开发Android应用时,有时需要集成二维码和条形码扫描功能,这在微信等社交应用中非常常见。本文将详细讲解如何使用Delphi为Android应用程序调用Zxing 3.3.3库来实现类似微信的扫码功能。 首先,Zxing(又称为...

    Android 利用精简Zxing实现条形码/二维码 扫描Demo

    本教程将详细介绍如何利用精简版的Zxing库在Android应用中实现快速、高效的条形码和二维码扫描功能。 首先,我们需要了解Zxing的基本概念。Zxing(又称“二维码解码器”)是一个跨平台的开源项目,由Google开发并...

    android zxing简洁的条码/二维码扫描功能的实现

    本文将详细阐述如何在Android应用中集成ZXing,实现实现简洁的条码/二维码扫描功能。 1. **集成ZXing到项目** 首先,你需要将ZXing库添加到你的Android项目中。可以通过Gradle依赖来引入,添加以下代码到`build....

    ZXing实现自定义二维码扫描框

    总结,这个项目展示了如何在Android应用中使用ZXing库实现自定义的二维码扫描功能,包括调整扫描框大小、控制手电筒和访问相册的权限管理,以及在扫描框下方添加额外的UI元素。通过这个过程,开发者可以深入理解...

    android上使用ZXing识别条形码和二维码

    在Android平台上进行条形码和二维码的识别与生成,ZXing库是一个不可或缺的工具。ZXing,全称为“Zebra Crossing”,是一个开源项目,提供了多种平台的条码处理能力,包括读取、生成以及解析。在Android应用开发中,...

    基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果

    这个教程将指导你如何使用Zxing库来创建一个类似微信的二维码扫描应用。 首先,你需要了解Zxing库。Zxing,又称为“开源的跨平台条码图像处理库”,可以处理一维和二维条码,包括但不限于EAN-13、UPC-A、Code 39、...

    Android studio 之Zxing 实现二维码生成和扫描

    本教程将聚焦于如何在Android Studio环境中利用Zxing库实现二维码的生成与扫描功能。 首先,我们从集成Zxing库开始。要将Zxing库导入到Android Studio项目中,你可以选择以下两种方式之一: 1. **添加Gradle依赖**...

Global site tag (gtag.js) - Google Analytics