ZXing简介:
ZXing是谷歌的一个开源项目,用Java实现多种格式的ID/2D条码图像处理库,它包含了联系到其他语言的端口。
Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码。
其实ZXing项目里的Android实现太过复杂多余东西太多,好多用不到,可以对其进行简化。简化过程可以参看:http://www.oschina.net/question/54100_28521
自己需要新建一个项目,把需要的类,包抽取出来放到这个新项目中
在修改的过程中,有很多是关于R 资源的问题,在此我们需要将Values 里面的两个xml资源文件拷入项目中:colos.xml 和ids.xml 。 现在看看error 是不是少了很多。 剩下的就是包名问题了。
使用的时候可以把这个抽取好的项目作为一个Library导入需要实现二维码功能的项目中。
在新项目中需要声明权限:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
同时声明使用到的Activity:
<activity
android:name="com.xys.libzxing.zxing.activity.CaptureActivity"
android:label="@string/app_name" >
</activity>
MainActivity
package com.example.zxing_test;
import javax.crypto.spec.IvParameterSpec;
import com.xys.libzxing.zxing.activity.CaptureActivity;
import com.xys.libzxing.zxing.encoding.EncodingUtils;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private Button bt_Scran;
private TextView tv_result;
private Button bt_QRcode;
private EditText et_mstring;
private CheckBox mCheckBox;
private ImageView iv_QRCode;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt_Scran = (Button) findViewById(R.id.bt_scran);
tv_result = (TextView) findViewById(R.id.tv_result);
et_mstring = (EditText) findViewById(R.id.et_mstring);
bt_QRcode = (Button) findViewById(R.id.bt_QRcode);
mCheckBox = (CheckBox) findViewById(R.id.cb_logo);
iv_QRCode = (ImageView) findViewById(R.id.iv_mQRcode);
/**
* 扫描解析二维码
*/
bt_Scran.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
startActivityForResult(new Intent(MainActivity.this, CaptureActivity.class), 0);
}
});
/**
* 生成二维码
*/
bt_QRcode.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String mString = et_mstring.getText().toString();
if(mString.equals("")){
Toast.makeText(MainActivity.this, "不能为空", 0).show();
}else{
Bitmap bitmap = EncodingUtils.createQRCode(mString, 500, 500, mCheckBox.isChecked()?BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher):null);
iv_QRCode.setImageBitmap(bitmap);
}
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK){
Bundle bundle = data.getExtras();
String result = bundle.getString("result");
tv_result.setText(result);
}
}
}
布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.zxing_test.MainActivity" >
<Button
android:id="@+id/bt_scran"
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="scran" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="扫描结果" />
<TextView
android:id="@+id/tv_result"
android:layout_width="wrap_content"
android:layout_height="50dp" />
<EditText
android:id="@+id/et_mstring"
android:layout_width="match_parent"
android:layout_height="50dp"
android:maxLines="2" >
</EditText>
<CheckBox
android:id="@+id/cb_logo"
android:layout_width="match_parent"
android:layout_height="20dp"
android:text=" logo" >
</CheckBox>
<Button
android:id="@+id/bt_QRcode"
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="生成二维码" />
<ImageView
android:id="@+id/iv_mQRcode"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>