Android使用ZBar扫描二维码/条形码(实例)+常见问题汇总
2016-06-10 18:54
489 查看
写在前面:因项目需求,需要实现二维码扫码功能,笔者测试过多种开源扫码工具,但因不跨平台、扫描速度慢等问题逐个放弃,最后选用ZBar实现功能,笔者发现ZBar扫码在跨主流手机平台、扫码速度等方面有较明显的优势,现将核心功能整理成示例代码,便于日后复用和有需要的读者参考。
2.完整实例源码(包含以上库文件):http://download.csdn.net/detail/daijin888888/9516713
2.在lib下添加armeabi中的libiconv.so和libzbar.so库文件。
3.添加res下的资源文件,包括drawable、layout、raw、values(包含ids.xml)等。
4.在AndroidManifest.xml清单中添加权限和Activity声明。
5.调用扫码功能,在调用处通过以下代码使用扫码功能:
[java] view
plain copy
Intent intent = new Intent();
intent.setClass(MainActivity.this, CaptureActivity.class);
startActivityForResult(intent, SCANNIN_GREQUEST_CODE);
6.获得扫码结果,在步骤5中代码块所在的Activity中通过以下代码获取扫码结果:
[java] view
plain copy
@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;
}
}
2.扫码前(点击“扫码”开始扫码)
3.扫码时(对准二维码)
4.扫码后(呈现出扫码结果)
1.未移植armeabi文件夹下的libiconv.so和libzbar.so库文件。(缺少时一般在运行时报错)
2.未在AndroidManifest.xml清单中配置所需权限。(可以运行,但扫码时黑屏,无法开启摄像头)
[html] view
plain copy
<!-- 二维码扫码 -->
<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。(缺少时一般在运行时报错)
[html] view
plain copy
<activity
android:name="com.zbar.lib.CaptureActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar"
android:windowSoftInputMode="stateAlwaysHidden" >
资源下载
1.开发所需库文件:http://download.csdn.net/detail/daijin888888/95167052.完整实例源码(包含以上库文件):http://download.csdn.net/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
Intent intent = new Intent();
intent.setClass(MainActivity.this, CaptureActivity.class);
startActivityForResult(intent, SCANNIN_GREQUEST_CODE);
6.获得扫码结果,在步骤5中代码块所在的Activity中通过以下代码获取扫码结果:
[java] view
plain copy
@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清单中配置所需权限。(可以运行,但扫码时黑屏,无法开启摄像头)
[html] view
plain copy
<!-- 二维码扫码 -->
<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。(缺少时一般在运行时报错)
[html] view
plain copy
<activity
android:name="com.zbar.lib.CaptureActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar"
android:windowSoftInputMode="stateAlwaysHidden" >
相关文章推荐
- Android 三种常见动画
- Android应用组件
- 关于埋点
- Android Studio教程(四)之AS窗口
- Android 获取系统信息
- Android之数据存储----使用LoaderManager异步加载数据库
- Android Studio教程(三)之AS的设置
- Android应用基础知识
- Android工程师级别
- Android TextView setText内嵌html标签
- Android自启动管理
- 解决Genymotion中的unknown generic error错误以及无法联网下载Android虚拟设备
- Android intent flag启动模式
- 收藏了几个学习android+h5混合开发用得到的博客
- android—Compiling with Jack—Jack is a new Android toolchain
- android文件下载自动安装或打开
- android中获取布局文件的三种方法
- 【自定义View】01--常用工具介绍
- Android Studio教程(二)之AS的安装和配置目录介绍
- Android Studio教程(一)之AS的安装教程