一、概述
现在对于二维码条形码的扫描,目前来说主流框架有两个,一个是Zxing,另一个是Zbar,两者我都使用过,可能是因为我下载的版本的原因,我在使用Zbar的时候有点卡顿,甚至是读取有点慢,Zxing在维护方面做的还是i比较好的,下面我们来看下Zxing如何集成到项目中来;
二、集成Zxing
开源项目地址是 https://code.google.com/p/zxing/
首先,需要下载ZXing项目所依赖的Jar包的源码。
下载地址是 http://repo1.maven.org/maven2/com/google/zxing/core/2.2/core-2.2-sources.jar 。
然后再来下载ZXing项目,下载地址是 https://zxing.googlecode.com/files/ZXing-2.2.zip 。
在ZXing项目中直接导入core-3.0.0的Jar包是无法正常运行的,所以我们只能通过将core-2.2的源码加入到ZXing项目中来实现。下载好以上两个文件后,先解压core-3.0.0-sources.jar文件,然后将其copy到Zxing的文件夹下,下面我们来看下目录结构:
我们新建的MainActivity是显示二维码扫描界面的,应在Androidmenifest文件中配置android:screenOrientation=”portrait”,设置为竖屏状态,下面我们来看下布局及代码:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button scanBtn;
private TextView resultTv;
private static final String DECODED_CONTENT_KEY = "codedContent";
private static final String DECODED_BITMAP_KEY = "codedBitmap";
private static final int REQUEST_CODE_SCAN = 0x0000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
scanBtn = (Button) findViewById(R.id.scanBtn);
resultTv = (TextView) findViewById(R.id.resultTv);
scanBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.scanBtn:
//开启扫描的界面
Intent intent = new Intent(MainActivity.this,
CaptureActivity.class);
startActivityForResult(intent, REQUEST_CODE_SCAN);
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// 扫描二维码/条码回传
if (requestCode == REQUEST_CODE_SCAN && resultCode == RESULT_OK) {
if (data != null) {
String content = data.getStringExtra(DECODED_CONTENT_KEY);
Bitmap bitmap = data.getParcelableExtra(DECODED_BITMAP_KEY);
resultTv.setText("解码结果: \n" + content);
}
}
}
}
有一点是需要注意的,core-3.0.0.jar要添加作为一个libiary,右键找到as a libiary后,重新build下project即可引用里面的相关包,我们来看下最终的扫描界面