Android使用ZBar扫描二维码/条形码(实例)+常见问题汇总
写在前面 :因项目需求,需要实现二维码扫码功能,笔者测试过多种开源扫码工具,但因不跨平台、扫描速度慢等问题逐个放弃,*后选用ZBar实现功能,笔者发现ZBar扫码在跨主流手机平台、扫码速度等方面有较明显的优势,现将核心功能整理成示例代码,便于日后复用和有需要的读者参考。
使用方式
1.复制com.zbar.lib及其下共4个包文件到项目中。
2.在lib下添加armeabi中的libiconv.so和libzbar.so库文件。
3.添加res下的资源文件,包括drawable、layout、raw、values(包含ids.xml)等。
4.在AndroidManifest.xml清单中添加权限和Activity声明。
5.调用扫码功能,在调用处通过以下代码使用扫码功能:
- Intent intent = new Intent();
- intent.setClass(MainActivity.this, CaptureActivity.class);
- startActivityForResult(intent, SCANNIN_GREQUEST_CODE);
6.获得扫码结果,在步骤5中代码块所在的Activity中通过以下代码获取扫码结果:
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- switch (requestCode) {
- case SCANNIN_GREQUEST_CODE:
- if (resultCode == RESULT_OK) {
- String result = data.getStringExtra(“QR_CODE”);
- // TODO 获取结果,做逻辑操作
- tvResult.setText(result);
- } else {
- Toast.makeText(this, “无法获取扫码结果”, 2000).show();
- }
- break;
- }
- }
测试效果:
1.二维码(一串字符:1234567890)
2.扫码前(点击“扫码”开始扫码)
3.扫码时(对准二维码)
4.扫码后(呈现出扫码结果)
常见问题汇总
移植后,若项目本身没报错,但不能扫码,可能存在以下问题:
1.未移植armeabi文件夹下的libiconv.so和libzbar.so库文件。(缺少时一般在运行时报错)
2.未在AndroidManifest.xml清单中配置所需权限。(可以运行,但扫码时黑屏,无法开启摄像头)
- <!– 二维码扫码 –>
- <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” />
3.未在AndroidManifest.xml清单文件中配置Activity:CaptureActivity。(缺少时一般在运行时报错)
- <activity
- android:name=“com.zbar.lib.CaptureActivity”
- android:configChanges=“orientation|keyboardHidden”
- android:screenOrientation=“portrait”
- android:theme=“@android:style/Theme.Black.NoTitleBar”
- android:windowSoftInputMode=“stateAlwaysHidden” >