Android下利用zbar类库实现扫一扫

程序源代码及可执行文件下载地址:http://files.cnblogs.com/rainboy2010/zbardemo.zip

Android下常用的条码扫描类库有zxing和zbaro,比较了一下,发现zbar扫描速度更快,能够识别的条码类型更多,下面就讲解一下如何利用zbar实现扫一扫,先放上一张效果图:

主要代码如下:

1.在onPreviewFrame方法里获取预览图像,然后传递给DecodeHandler去解析

 @Override
  public void onPreviewFrame(byte[] data, Camera camera)
  {
	 if (!useOneShotPreviewCallback)
	 {
	   camera.setPreviewCallback(null);
	 }
	 if(previewHandler != null)
	 {
		Camera.Parameters parameters = camera.getParameters();
	    Size size = parameters.getPreviewSize();
	    Message message = previewHandler.obtainMessage(previewMessage, size.width,size.height, data);
	    message.sendToTarget();
	    previewHandler = null;
	 }
	 else
	 {
	    Log.d(TAG, "Got preview callback, but no handler for it");
	 }

   }

2. 在decode方法里调用zbar类库对图像进行解析

 private void decode(byte[] data, int width, int height) {

    Image barcode = new Image(width, height, "Y800");
	Rect scanImageRect = activity.getViewfinderView().getScanImageRect(height,width);
    barcode.setCrop(scanImageRect.top, scanImageRect.left, scanImageRect.bottom, scanImageRect.right);
    barcode.setData(data);

    int result = scanner.scanImage(barcode);
    String strResult="";
    if (result != 0)
    {
       SymbolSet syms = scanner.getResults();
       for (Symbol sym : syms)
       {
    	   strResult=sym.getData().trim();
    	   if(!strResult.isEmpty())
    	   {
             break;
    	   }
       }
    }

    if(!strResult.isEmpty())
    {
       Message message = Message.obtain(activity.getHandler(), R.id.decode_succeeded, strResult);//Message信息传来传去,有点绕
       Log.d(TAG, "Sending decode succeeded message...");
       message.sendToTarget();
    }
    else
    {
        Message message = Message.obtain(activity.getHandler(), R.id.decode_failed);
        message.sendToTarget();
    }
  }

  

时间: 2024-08-11 08:07:53

Android下利用zbar类库实现扫一扫的相关文章

Android下利用zxing类库实现扫一扫

程序源代码及可执行文件下载地址:http://files.cnblogs.com/rainboy2010/zxingdemo.zip zxing,一款无比强大的条码解析类库,下面讲解一下如何利用zxing类库实现扫一扫功能,先放上一张效果图: 主要代码如下: 1.在onPreviewFrame方法里获取预览图像,然后传递给DecodeHandler去解析 public void onPreviewFrame(byte[] data, Camera camera) { Point cameraRe

Android下利用SQLite数据库实现增删改查

1: 首先介绍如何利用adb查看数据库 1: adb shell 2: cd /data/data/包名/databases 3:  sqlite3 数据库 4   接下来就可以进行数据库的sql语法的使用了 bean对象: public class Person { private int id; private String name; private String number; } 数据库的创建以及表的创建: package com.example.db; import android.

android 下 利用webview实现浏览器功能

android 下 利用webview实现浏览器功能: 1.界面添加WEBVIEW控件. 2.在界面.JAVA代码页面(protected void onCreate(Bundle savedInstanceState) 方法中)添加如下代码: //#region WebView wb=(WebView)findViewById(R.id.Wb_Main); //设置WebView属性,能够执行Javascript脚本 wb.getSettings().setJavaScriptEnabled(

在Android下利用Shell命令管理网络接口

为啥要使用shell命令操纵本地网络?因为这样就可以绕过上层connectService来干一些事情,至于具体要干点什么事情,容我先卖个关子在以后的blog里说明. 首先进入adb shell,然后去Ping一个服务器的ip地址 <code style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console

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

写在最前(这是对上一篇博文的问题做的更新[android利用zbar二维码扫描]) project下载   zbarLib编译project  project下载0积分 bug 在2.3的系统中Holder须要设置type,否则会黑屏(感谢网友[(α ⒎待sんа)294439435]) com.example.qu.MainActivity的第50行mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 今天发现 在com.exampl

Android下拉刷新库,利用viewdraghelper实现,集成了下拉刷新,底部加载更多,数据初始加载显示loading等功能

项目Github地址:https://github.com/sddyljsx/pulltorefresh Android下拉刷新库,利用viewdraghelper实现. 集成了下拉刷新,底部加载更多,以及刚进入加载数据的loadview.包括了listview与gridview的改写. 效果1: 效果2: 效果3: 效果4: 效果5: 使用说明: imageList=(ListView)findViewById(R.id.image_list); imageAdapter=new ImageA

android利用zbar二维码扫描

源码下载 之前用zxing做开发,各种奇葩问题,横屏修等等,而且性能也不搞.被测试批了,没办法后来换了zbar.性能好多了. 直接上图,看看效果 2.界面上的查找框 /** * 2014-7-15 上午11:14:21 * Created By niexiaoqiang */ package com.example.qu; import android.content.Context; import android.graphics.Canvas; import android.graphics

【Android】利用adt-bundle在Linux下轻松搭建Android开发环境与Hello world

本文与<[Android]利用adt-bundle在Windows下轻松搭建Android开发环境与Hello world>(点击打开链接)是姊妹篇,只是这次操作换成了Linux .拿Ubuntu做例子.还是与Windows一样.由于JDK+Eclipse+ADT+SDK或者JDK+Android Studio在安装的过程中非得联网不可.因此也选用了JDK1.7+解压即用的官方绿色版Android开发环境adt-bundle20131030去安装. 一.基本准备 首先还是与<[Linux

Xamarin.Android下获取与解析JSON

一.新建项目 1.新建一个Android项目,并命名为为NetJsonList 2.右击引用,选择添加引用,引用System.Json.dll 二.同步请求 既然是跨平台,我们自然不能按照java下的方式进行编写,否则如何跨平台呢,所以我们需要使用Syste.Net命名空间下的两个类:HttpWebRequest和HttpWebResponse. 首先打开Resources/layout/Main.axml文件 删除其他上面的控件,并拖拽一个Text(large)到其中. 接着打开MainAct