最近准备研究下android手机上二维码的开发与扫描,百度了下,资料不是很多,大部分人都是推荐使用开源的zxing进行开发,现借鉴博客http://www.cnblogs.com/tankaixiong/archive/2010/10/28/1863997.html里面的一些相关内容进行的测试研究
zxing支持很多条码,如下:
|
|
|
|
在这里演示下使用google提供的扫描器进行扫描二维码功能
zxing官网地址:http://code.google.com/p/zxing/
目前版本:ZXing-2.2,在这里先把ZXing-2.2.zip和BarcodeScanner4.4.apk下载下来,4.5的版本无法在我的机子上安装,也不知道什么原因(提示解析包错误)
接着新建一个demo工程:
修改默认的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/scantxt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="这里显示扫描结果" />
<Button
android:id="@+id/scanbtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点我开始扫描" >
</Button>
</LinearLayout>
对于调用的扫描器的代码如下:
public class MainActivity extends Activity {
// 扫描结果
private TextView scanText = null;
//扫描按钮
private Button scanBtn = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
scanText = (TextView) findViewById(R.id.scantxt);
scanBtn = (Button)findViewById(R.id.scanbtn);
scanBtn.setOnClickListener(scanListener);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public Button.OnClickListener scanListener = new Button.OnClickListener() {
public void onClick(View v) {
//调用扫描的actity,也就是前面需要安装的BarcodeScanner4.4程序的中一个actity
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
// 设置参数,扫描的条码类型
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
//启动activity
startActivityForResult(intent, 0);
}
};
// 扫描成功后回调函数,传回code
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
String contents = intent.getStringExtra("SCAN_RESULT");
String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
// Handle successful scan
//显示扫描结果
scanText.setText(" 条形码为:" + contents + " 条码类型为: " + format);
} else if (resultCode == RESULT_CANCELED) {
scanText.setText(" 扫描失败!");
}
}
}
}
这样在本机上就可以使用zxing提供的扫描器进行二维码的扫描了