`
ax003d
  • 浏览: 12387 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Android 集成 Zxing 条码扫描器

阅读更多

参考文章(需XX):http://damianflannery.wordpress.com/2011/06/13/integrate-zxing-barcode-scanner-into-your-android-app-natively-using-eclipse/

 

本文在如上参考文章基础之上,进行了一些修改:

1. 修改扫描 action 的名字,当用户手机上已安装了 Zxing 扫描器,触发扫描操作不会弹出选择框(默认会弹出自己的应用程序和 Zxing 条码扫描器两个选项)

2. 兼容 Zxing 推荐的 IntentIntegrator,如果用户手机上安装了 Zxing 条码扫描器,优先使用安装的扫描器

 

step1. 签出Zxing源代码

svn checkout http://zxing.googlecode.com/svn/trunk/ zxing-read-only

 

step2. 编译Zxing源代码

cd zxing-read-only
ant -f core/build.xml

 

step3. 在Eclipse中导入Zxing的安卓工程

路径是 zxing-read-only/android,并设置它为一个 library 工程,右键工程属性 | Android | Is Library

 

step4. 修改源代码 CaptureActivity/src/com/google/zxing/client/android/Intents.java 第 34 行

 

// public static final String ACTION = "com.google.zxing.client.android.SCAN";
public static final String ACTION = "com.xxx.xxx.SCAN"; // 避免和默认的 Zxing 条码扫描器冲突
 修改源代码 CaptureActivity/src/com/google/zxing/client/android/camera/CameraConfigurationManager.java 第 101 行:
// if (safeMode || prefs.getBoolean(PreferencesActivity.KEY_DISABLE_CONTINUOUS_FOCUS, false)) {
if (safeMode || prefs.getBoolean(PreferencesActivity.KEY_DISABLE_CONTINUOUS_FOCUS, true)) { // 将默认值改为 true
 

step5. 如果编译出错,出现 switch-case 中 R.id.xxx 错误,说 R.id.xxx 不是常量,那是因为 ADT 1.4 之后,对于 library 类型的 project 生成的 R.java 文件内的值都不是常量了,具体原因请见如下链接:

http://stackoverflow.com/questions/15667755/androiderror-case-expressions-must-be-constant-expressions

解决方法是将出现 switch-case 的地方转换为 if-else 结构(光标放在 switch 单词上,然后 Ctrl-1,选择转换为 if-else 即可)

 

step6. 添加刚才导入的工程(默认名为CaptureActivity)作为自己工程的一个 Library 工程,在触发扫描器的代码中添加如下代码:

Intent intent = new Intent("com.google.zxing.client.android"
		+ ".SCAN");
intent.addCategory(Intent.CATEGORY_DEFAULT);
PackageManager pm = activity.getPackageManager();
List<ResolveInfo> availableApps = pm.queryIntentActivities(intent,
		PackageManager.MATCH_DEFAULT_ONLY);
if (availableApps.size() > 0) {
        // 如果用户已安装条码扫描器,使用默认的扫描器
	IntentIntegratorSupportV4 integrator = new IntentIntegratorSupportV4(
			this);
	integrator.initiateScan();
	mBuildInScanner = true;
} else {
        // 否则使用内置扫描器
        // 使用默认的 action 应该是 com.google.zxing.client.android.SCAN
	intent = new Intent("com.xxx.xxx.SCAN");
	startActivityForResult(intent, 0);
}

 

step7. 重写 onActivityResult 方法:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
	super.onActivityResult(requestCode, resultCode, data);
	if (mBuildInScanner) {
		IntentResult scanResult = IntentIntegratorSupportV4
				.parseActivityResult(requestCode, resultCode, data);
		if (scanResult != null) {
                        // 处理扫描结果 
                        scanResult.getContents();
		}
		return;
	}

	if (requestCode == 0) {
		if (resultCode == Activity.RESULT_OK) {
			String contents = data.getStringExtra("SCAN_RESULT");
			String format = data.getStringExtra("SCAN_RESULT_FORMAT");
                        // 处理扫描结果
		} else if (resultCode == Activity.RESULT_CANCELED) {
		}
	}
}

 

step8. 修改 AndroidManifest.xml 文件

<activity android:name="com.google.zxing.client.android.CaptureActivity"
     android:screenOrientation="landscape"
     android:configChanges="orientation|keyboardHidden"
     android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
     android:windowSoftInputMode="stateAlwaysHidden">
     <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.DEFAULT"/>
     </intent-filter>
     <intent-filter>
        <!-- 默认的应该是 com.google.zxing.client.android.SCAN -->
        <action android:name="com.xxx.xxx.SCAN"/>
        <category android:name="android.intent.category.DEFAULT"/>
     </intent-filter>
</activity>

 并添加如下权限:

<uses-permission android:name="android.permission.CAMERA"/>

 

step9. 如果要release自己的程序,需在 zxing-read-only/android 路径下添加以下文件,否则在执行 ant release 过程中需要输入 keystore 的密码:

 

# secure.properties
key.store.password=<your pwd>
key.alias.password=<your pwd>

 

# custom_rules.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="custom_rules" default="help">
  <property file="secure.properties" />
</project>

 

修改 build.xml:

...
<project name="BarcodeScanner" default="help">

  <import file="custom_rules.xml" optional="true" /><!-- 添加此行 -->

...

 

 

step10. 编译运行

 

 

 

 

 

 

分享到:
评论

相关推荐

    ZXing条形码扫描

    描述“ZXing条码扫描器(android竖屏)”强调了这款应用是专为Android设备设计的,并且特别优化了竖屏模式下的扫描体验。在Android手机上,竖屏模式是用户最常用的屏幕方向,因此,确保在竖屏下能稳定、高效地扫描...

    zxing条形码扫描DEMO

    2. **一个类演示调用**:这个类通常会包含一个简单的Activity,展示了如何启动ZXing的条形码扫描器。在Android中,这通常涉及到创建一个`IntentIntegrator`对象,调用其`initiateScan()`方法来启动扫描界面。扫描...

    zxing条形码扫描

    这个JAR文件可以被集成到Android或者Java项目中,使得应用具备条形码扫描的功能。 在开发基于ZXing的应用时,开发者通常需要创建一个`LuminanceSource`的子类来处理特定的图像数据格式。如果默认的`...

    安卓应用基于ZXing解码器嵌入式条码扫描器库ZXing Android Embedded的APP完整项目代码

    ZXing Android Embedded是一个适用于Android的条形码扫描库,使用ZXing进行解码。该项目松散地基于ZXing Android条形码扫描仪应用程序,但不隶属于官方ZXing项目。默认情况下,只有 SDK 24+ 有效,即使库指定 19 ...

    android 使用zxing core 进行条形码扫描

    3. **初始化条形码扫描器** - 创建一个`CaptureActivity`,继承自`Activity`,并实现` BarrettCodeReader`的回调接口`DecodeCallback`。 - 在`onResume()`方法中开启相机预览和扫描,`onPause()`时关闭。 4. **...

    Android Zxing包 调用摄像头扫描

    总之,集成Zxing到Android应用中,可以让你轻松实现条码扫描功能。但要注意,良好的用户体验和性能优化是关键。在实际开发过程中,你可能需要根据具体需求进行定制和调整,以满足不同场景的应用。

    Android-zxing条码扫描视图

    **Android-zxing条码扫描视图** 在Android应用开发中,条码扫描功能是一个常见的需求,用于读取商品信息、二维码链接等数据。ZXing(Zebra Crossing)是一个开源项目,提供了一套全面的条码读取库,适用于多种平台...

    安卓ZXING条码扫描无错版

    要在自己的Android应用中集成ZXing条码扫描功能,开发者需要将源码导入到Android Studio项目中,然后创建一个扫描活动,调用ZXing的相关API来启动扫描界面和处理扫描结果。同时,也需要考虑权限管理,如请求相机...

    AndroidStudio集成Zxing实现扫一扫demo

    在Android开发中,"扫一扫"功能通常用于二维码和条形码扫描,这为用户提供了快速获取信息或执行操作的方式。Zxing(ZXing,意为“条形码阅读器”)是一个开源的、跨平台的二维码和条形码读取库。在Android Studio中...

    app.zip_ZXing _android_zxing扫描app_zxing扫码器app_二维码

    1. **集成ZXing库**:在项目的build.gradle文件中添加ZXing的依赖。对于核心库,添加: ``` implementation 'com.google.zxing:core:3.4.1' ``` 对于Android嵌入式库,添加: ``` implementation '...

    android ZXing4.3.1扫描器源码

    在Android平台上,ZXing通常被用于开发扫描和生成条形码或二维码的应用程序。版本4.3.1是针对这个库的一个特定更新,它提供了改进的功能和修复了一些已知的问题。 ZXing的主要功能包括: 1. **条形码和二维码扫描**...

    android(zxing)全屏二维码识别,全屏扫描二维码,近距离扫描二维码,图片识别二维码

    首先,ZXing(Zebra Crossing)是一个开源的条码图像处理库,它支持多种格式的编码和解码,包括QR码和条形码。在Android应用中,ZXing可以被集成到项目中,以实现扫描和生成二维码的功能。 1. **集成ZXing库** 在...

    Android Zxing 扫描条码实现竖屏模式

    在Android应用开发中,ZXing库(又称为Zebra Crossing)是一个非常流行的开源库,用于创建条形码和二维码的扫描器。这个库为开发者提供了简单的方法来集成条码扫描功能,而无需从零开始编写复杂的图像处理代码。在本...

    android studio ZXing 二维码扫描

    在Android开发中,ZXing(Zebra Crossing)是一个开源项目,用于处理条形码和二维码的扫描与生成。ZXing库提供了多种平台的支持,包括Java、Android以及iOS。本项目是基于ZXing进行的二次开发,尽管作者提到修改后的...

    Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果

    在Android开发中,实现二维码和条形码扫描功能是一项常见的需求,这通常涉及到与图像处理和识别技术的结合。Google的Zxing(ZXing,意为“zebra crossing”,斑马线)是一个开源项目,提供了跨平台的条码读取库,...

    Android ZXing二维码——集成本地图片扫描、图片浏览器、相机扫描二维码、生成二维码

    本文将深入探讨如何在Android应用中集成ZXing二维码功能,包括本地图片扫描、图片浏览器和相机扫描二维码,以及如何生成二维码。 首先,我们需要在项目中添加ZXing的依赖。通常,我们可以通过Gradle来导入ZXing的...

    android(zxing资源自带自动聚焦)

    总之,ZXing库为Android开发者提供了一种简单且强大的方式来实现二维码和条形码扫描。通过正确集成和充分利用其自带的自动聚焦功能,开发者可以构建出高效且用户友好的扫描应用。在实际项目中,应根据需求选择合适的...

    Android使用ZXing生成和读取条形码、二维码

    ZXing库提供了多种功能,包括条形码扫描、二维码生成以及多种条形码格式的支持,如EAN-13、UPC-A、QR Code等。这个教程将详细介绍如何在Android应用中集成ZXing,实现条形码和二维码的生成与读取。 首先,我们需要...

    Android zxing二维码扫描个人优化版

    ZXing是一个强大的、开放源码的多格式一维和二维条码图像处理库,支持多种编码格式,如QR码、Data Matrix、UPC和EAN等。这款个人优化版针对原版ZXing在性能、用户体验以及功能特性上进行了改进,旨在提供更加高效、...

    android zxing扫描生成条码二维码,支持从手机选择图片识别

    在Android应用开发中,ZXing(Zebra Crossing)是一个开源项目,它提供了全面的条形码和二维码处理功能,包括生成、扫描和识别。本文将深入探讨如何利用ZXing库在Android应用程序中实现扫描和生成条码及二维码,并且...

Global site tag (gtag.js) - Google Analytics