Android平台下利用zxing实现二维码开发
  现在走在大街小巷都能看到二维码,而且最近由于项目需要,所以研究了下二维码开发的东西,开源的库主要有zxing和zbar,zbar在iPos平台上应用比较成熟,而在Android平台上主流还是用zxing库,因此这里主要讲述如何利用zxing进行二维码开发。
1.如何将zxing的Android源码导入工程。
  在导入zxing的android源码之前,先去官方下载zxing的源码:le/p/zxing/downloads/list
  我这里下载的是1.6版本的,我试验了几个版本,发现2.0以后的版本实际用起来没有1.6和1.7版本的好用,最后选择了1.6版本。
娱乐咨询
  zxing 1.6源码结构如下:
 
  其中android文件夹就是android平台下的官方例子。
欧弟 罗志祥  在导入之前先要对core文件下的源码进行编译,得到核心包core.jar。
  编译方法请参照:blog.163/yimigao@126/blog/static/671560502011611111116747/
  然后就可以导入android平台下的例子了,导入方法如下:
  1)打开Eclipse,新建android项目:(注意不要直接把android文件夹拷到workspace下导入,那样会无法导入)
 
  2)导入核心包core.jar。
  3)修改l文件。在导入core.jar之后工程还是会有错误:
 
  出现这种错误可能是由于字符错误导致的,只需要把所有的%s 和%f改成 %1sf  即可。
  修改完之后重新清理项目,此时已经没有错误了:
 
   4)运行效果:
 
2.代码简化
  上面代码中,很多功能我们在自己的项目中都用不到,因此需要对其进行简化,至于如何简化这里就不赘述了,网上有很多教程。下面只给出简化后的结果:
 
  如果只进行二维码识别和二维码生成的话,只需要上面包中的文件。其中CaptureActivity.java是拍照取景的类,camera包下面的类主要与照相机相关的类,decoding和encoding是解码和编码相关的类,view是取景框相关的类。
3.将简化的zxing代码嵌入自己的工程。
  在自己的工程中嵌入简化的zxing代码即可实现二维码生成和识别功能。
  嵌入方法:算你狠陈小春
  1)将上述简化的代码拖到自己工程目录下;
  2)将values文件夹和raw文件夹复制自己工程目录下;
  3)建立CaptureActivity.java的布局文件l。
<?xml version="1.0" encoding="utf-8"?>
<FrameLayoutxmlns:android="schemas.android/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<SurfaceView
android:id="@+id/preview_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
<ing.view.ViewfinderView
android:id="@+id/viewfinder_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:orientation="vertical">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerInParent="true"
android:gravity="center"
android:paddingBottom="10dp"
android:paddingTop="10dp"
android:text="Scan Barcode"
android:textColor="@android:color/white"
android:textSize="18sp"
android:textStyle="bold"/>
<Button
android:id="@+id/btn_cancel_scan"
android:layout_width="230dp"
android:layout_height混沌天下="40dp"
android:layout_alignParentBottom="true"
android:layout_centerInParent="true"
对教师的评语android:layout_marginBottom="75dp"
android:text="Cancel"
android:textSize="15sp"
android:textStyle="bold"/>
</RelativeLayout>
</FrameLayout>
  3)导入core.jar包
  4)修改l
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="schemas.android/apk/res/android"
package="com.qrcode"
android:versionCode="1"
android:versionName="1.0">
<uses-sdkandroid:minSdkVersion="7"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.camera.autofocus"/>
<application android:icon="@drawable/icon"android:label="@string/app_name">
<activity 李俊基主演的电视剧android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:configChanges="orientation|keyboardHidden"
android:name="ing.activity.CaptureActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:windowSoftInputMode="stateAlwaysHidden">
</activity>
</application>
</manifest>
  5)运行效果:
   
  在这里识别二维码之后是把结果返回到上一个activity显示,所以在MainActivity中调用方法是:
Intent openCameraIntent = newIntent(MainActivity.this,CaptureActivity.class);
startActivityForResult(openCameraIntent, 0);
  然后获取结果在onActivityResult中进行:
@Override
protectedvoidonActivityResult(intrequestCode, intresultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
            Bundle bundle = Extras();
            String scanResult = String("result");
resultTextView.setText(scanResult);
        }
    }
  如果要直接在CaptureActivity中弹出识别结果,可以更改CaptureActivity.java的handleDecode方法:
publicvoidhandleDecode(Result result, Bitmap barcode) {