87284155 2012-07-23
在企业应用中可能某一些情况,需要二维码扫码,大多数采用的开源组件zxing实现。简介
最近的Widget项目用到需要用摄像头来处理条形码,章师兄推荐了ZXing这个开源的项目,于是做一简单的调研。
ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码。目标是能够对QR编码、DataMatrix、UPC的1D条形码进行解码。其提供了多种平台下的客户端包括:J2ME、J2SE和Android。
当前,ZXing主要支持以下条形码:
UPC-AandUPC-E
EAN-8andEAN-13
Code39
Code128
QRCode
DataMatrix('alpha'quality)
ITF
首先,在http://code.google.com/p/zxing/上下载到ZXing的应用程序包,解压下载到的程序包后,我们可以看到整个应用程序分为一些组件。如下:
1.core:核心包,是整个应用的主要组件组成部分。
2.javame:为JavaME来定制的客户端工具。
3.javase:为PC端定制的客户端工具。
4.android:为Android端定制的客户端工具。
5.androidtest:Android测试应用程序,里面有在其它程序中使用此应用的示例。
基本测试
ZXing程序的运行需要我们使用Ant去打包编译之后才可。在这里,我主要调研了在PC端,在WTK上及android上的运行。
各种语言zxing的实现路径:
http://zxing.googlecode.com/svn
源代码svn路径:
http://code.google.com/p/zxing/downloads/list。
zxingAPK路径:
http://zxing.googlecode.com/files/BarcodeScanner4.1.apk
zxing和应用整合官方代码:
http://zxing.googlecode.com/svn/trunk/android-integration
测试代码如下:
Java代码
packagecom.easyway.android;
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importandroid.widget.TextView;
/**
*二维码扫码应用实例
*
*1.安装zxing客户端androidapk。
*2.调用相关的zxing
*3.获取相关的执行的结果
*
*如何扫描条形码
*现在做条形码扫描,java一般用zxing。zxing有多种复用方式,最简单的方式是,
*安装zxing软件,通过googlemarket。在自己的应用中,通过Intent调用zxing的扫描条码的Activity,
*然后将扫描到的结果返回自己的Activity。
*比较复杂的办法是,将zxing库包含在自己的程序中,这比较适合正式的应用。
*@Title:
*@Description:实现TODO
*@Copyright:Copyright(c)2011
*@Company:易程科技股份有限公司
*@Date:2012-5-9
*@authorlonggangbai
*@version1.0
*/
publicclassAndroidScanBarcodeActivityextendsActivityimplementsOnClickListener{
privateButtonbutton;
privateTextViewtextView;
/**Calledwhentheactivityisfirstcreated.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.button=(Button)this.findViewById(R.id.btnscan);
this.button.setOnClickListener(this);
this.textView=(TextView)this.findViewById(R.id.txtScan);
}
@Override
publicvoidonClick(Viewview){
//调用对应的扫描方法
Intentintent=newIntent("com.google.zxing.client.android.SCAN");
this.startActivityForResult(intent,0);
}
/**
*获取扫描的结果
*/
@Override
protectedvoidonActivityResult(intrequestCode,intresultCode,Intentintent){
if(requestCode!=0){
this.textView.setText(R.string.noresult);
return;
}
if(resultCode==RESULT_OK){
Stringcontents=intent.getStringExtra("SCAN_RESULT");
Stringformat=intent.getStringExtra("SCAN_RESULT_FORMAT");
textView.setText("条形码为:"+contents+"条码类型为:"+format);//利用页面的textveiw显示扫描后的结果}elseif(resultCode==RESULT_CANCELED){
}
}
}