Android使用ZBar扫描二维码/条形码(实例)+常见问题汇总

本文介绍了一种基于ZBar库的二维码扫码功能实现方案。该方案解决了跨平台和扫描速度慢的问题,并提供了详细的使用步骤及常见问题解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面 :因项目需求,需要实现二维码扫码功能,笔者测试过多种开源扫码工具,但因不跨平台、扫描速度慢等问题逐个放弃,最后选用ZBar实现功能,笔者发现ZBar扫码在跨主流手机平台、扫码速度等方面有较明显的优势,现将核心功能整理成示例代码,便于日后复用和有需要的读者参考。

资源下载

1.开发所需库文件:http://download.youkuaiyun.com/detail/daijin888888/9516705

2.完整实例源码(包含以上库文件):http://download.youkuaiyun.com/detail/daijin888888/9516713

使用方式

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.调用扫码功能,在调用处通过以下代码使用扫码功能:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. Intent intent = new Intent();  
  2. intent.setClass(MainActivity.this, CaptureActivity.class);  
  3. startActivityForResult(intent, SCANNIN_GREQUEST_CODE);  
6.获得扫码结果,在步骤5中代码块所在的Activity中通过以下代码获取扫码结果:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. @Override  
  2. protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  3.     super.onActivityResult(requestCode, resultCode, data);  
  4.     switch (requestCode) {  
  5.     case SCANNIN_GREQUEST_CODE:  
  6.         if (resultCode == RESULT_OK) {  
  7.             String result = data.getStringExtra("QR_CODE");  
  8.             // TODO 获取结果,做逻辑操作  
  9.             tvResult.setText(result);  
  10.         } else {  
  11.             Toast.makeText(this"无法获取扫码结果"2000).show();  
  12.         }  
  13.         break;  
  14.     }  
  15. }  

测试效果:

1.二维码(一串字符:1234567890)


2.扫码前(点击“扫码”开始扫码)


3.扫码时(对准二维码)


4.扫码后(呈现出扫码结果)


常见问题汇总

移植后,若项目本身没报错,但不能扫码,可能存在以下问题:

1.未移植armeabi文件夹下的libiconv.so和libzbar.so库文件。(缺少时一般在运行时报错)

2.未在AndroidManifest.xml清单中配置所需权限。(可以运行,但扫码时黑屏,无法开启摄像头)

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1.   <!-- 二维码扫码 -->  
  2. <uses-permission android:name="android.permission.VIBRATE" />  
  3. <uses-permission android:name="android.permission.CAMERA" />  
  4. <uses-feature android:name="android.hardware.camera" />  
  5. <uses-feature android:name="android.hardware.camera.autofocus" />  
3.未在AndroidManifest.xml清单文件中配置Activity:CaptureActivity。(缺少时一般在运行时报错)
[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <activity  
  2. android:name="com.zbar.lib.CaptureActivity"  
  3. android:configChanges="orientation|keyboardHidden"  
  4. android:screenOrientation="portrait"  
  5. android:theme="@android:style/Theme.Black.NoTitleBar"  
  6. android:windowSoftInputMode="stateAlwaysHidden" >  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值