2022年android条码识别软件开发全解析 .pdf

上传人:C****o 文档编号:32496189 上传时间:2022-08-09 格式:PDF 页数:13 大小:644.04KB
返回 下载 相关 举报
2022年android条码识别软件开发全解析 .pdf_第1页
第1页 / 共13页
2022年android条码识别软件开发全解析 .pdf_第2页
第2页 / 共13页
点击查看更多>>
资源描述

《2022年android条码识别软件开发全解析 .pdf》由会员分享,可在线阅读,更多相关《2022年android条码识别软件开发全解析 .pdf(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、android 条码识别软件开发全解析android 条码识别软件开发全解析android 的有一大特色就是可以识别条形码得到URL 可以直接访问地址并下载,这个功能无疑为用户提供了很大的方便。于是在 android 上开发条码识别软件肯定是很有必要的!我在网上GOOGLE 了一下发现这类的资料特别少,而且又有很多人在问如何开发。这里我就分享一下自己的经验。这里我们会用到一个开源组件zxing ,大体上所有流行的条码都支持(一维码,二维码),并且识别是最好的在所有开源里面。我将详细讲解ZXing 的使用官网地址: http:/ 这个开源组件支持的条码有如下:UPC-A and UPC-E EA

2、N-8 and EAN-13 Code 39 Code 93 Code 128 QR Code ITF Codabar RSS-14 (all variants) Data Matrix PDF 417 (alpha quality) 下面我会详细讲解zxing 的使用,将在我下几篇博客中详细讲解。今天又很晚了,时间总是过的很快啊,尤其是晚上!呵呵,这里先贴出一些效果图吧!下几篇我的博客文章再详细讲解,大致有如下几个方面:zxing 的编译打包zxing 的简单调用zxing 生成自定义二维码识别图片中的条码效果如图:自定义二维条码名师资料总结 - - -精品资料欢迎下载 - - - - -

3、- - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 13 页 - - - - - - - - - 识别图片中的条码:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 13 页 - - - - - - - - - android 条码识别软件开发全解析(续 1 详解 )前天我发了一篇关于android 开发条码识别软件应用程序的博客,没想到竟很受关注。我也挺受鼓舞的,好吧,我接上次的博客继续往下写。前篇有人讲我写的没有

4、实质内容,我接受建议, 这里我就带大家体验一下最简单最直接的完美体验。编写你的第一个android 条码识别程序。zxing 的简单使用 ! 第一步:下载zxing 组件 :我上篇也简单介绍了一下这个组件,这里也不啰嗦了。下载两个东东源码和文档说明:地址下如http:/ BarcodeScanner3.5.apk这个是编译好的一个可安装的apk 程序!这个后面将用到。地址如下http:/ 第二步:模拟器已完全打开后安装 BarcodeScanner3.5.apk cmd 中 cd 到 sdk 目录利用 adb 命令安装BarcodeScanner3.5.apk adb install Barc

5、odeScanner3.5.apk 所在目录 ,请确定安装成功了。第三步: ok 终于到编码了!代码对应的 xml 如下01 02 05 08 09 11 第三步: OK 我们赶快看看效果吧,运行。你会看到如下:模拟器当然没有摄像头设备是扫描不到结果的。总结:这里只是做了一个简单的调用,调用简单但有一个很大的缺陷,这里我们要安装两个程序!在安装 BarcodeScanner3.5.apk为前题 ,这明显不能接受!所以接下来我将在下篇博客继续深入。敬请关注!android 条码识别软件开发全解析(续 2 详解绝杀! )关于 andriod 上实现条码识别,我前面已经讲了一些简单的应用,上篇讲过的

6、应用zxing 时必需多安装其组件这是不能接受的,我想大家都已经想到解决的方法了吧,呵呵, 其实正真学习一个东西,从其最基本的东东开始-大家都知道就是源码了。OK,我们要深入条码的识别的话自然就要去读zxing 的源码,你读完之后就不只是懂得其源码了,你会发现你其实收获到的不仅仅只有这点,还有更多的东西,比如你更深入学习android 的又一个应用示例对Android 的开发多了了解。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 13 页 - - - - - - - -

7、 - 官网源码提供免费下载,但帮助文档不是很全,最近有在读它的源码,去调试运行它的源码对你去理解了解其结构是很有帮助的。官网上只提供源码的下载,并没有提供编译好的开发包,也就是说你自己下过来后还要自己编译,不然把下下来的源码程序导入到myeclipse中会报错。如图:对于新手可能有些不知下手,这里我就讲下zxing 的编译, 为后面的开发做好一个最基本的准备!第一步:准备包http:/ 下载编译 zxing 下载 ant 地址 http:/ant.apache.org/ 下载 proguard 地址 http:/ 解压: zxing-1.6 目录结构下 : zxing-1.6 -android

8、 android-integration core build.properties build.xml . 第二步:配置环境变量。打开 build.properties 修改 proguard 为你下载的proguard 下的 lib 文件夹下的proguard.jar指向android-home你的 sdk 目录proguard-jar=./proguard4.5.1/lib/proguard.jar 版本为 4.4 以上android-home=./Android/android-sdk-windows 配置 ant 环境变量ANT_HOME E:MyLiBjavaANTapache-a

9、nt-1.8.1 PATH E:MyLiBjavaANTapache-ant-1.8.1bin cmd 中 ant 回车出现Buildfile: build.xml does not exist! Build failed 表现成功 ! 第三步:开始编译名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 13 页 - - - - - - - - - cd 到 core 目录然后ant! BUILD SUCCESSFUL Total time: * second 表示成功编译!

10、然后编译android cd ./android ant 好了! 有了核心包后我们可以就可以导入到项目工程里去了,现在是不是就不报错了!而且还可以直接运行的!如图:ZXingTestActivity为其 zxing 运用的例子,这是学习zxing 的一个很好的帮助!这个例子运行前提也是必需先安装BarcodeScanner3.5.apk android 目录则是前篇我博客讲调用时必需安装的一个组件BarcodeScanner3.5.apk的源码。呵呵,我想大家就知道了,对了,想不安装我们可以直接在源码上进行修改并进行编译,就ok 了。希望我的这几篇文章可以给大家有些帮助,也算引个方向, 最后更

11、深入学习代码,就只能看自己了!大家肯定比我聪明, 会很快读懂源码并很快应用起来,如有什么问题希望大家一起探讨学习,不断进步!下几篇博客我想可以写一些基于zxing 条码识别自己的运用程序示例了!如果大家有兴趣我会和大家一起分享!好了,今天就写到这里了!另附编译说明:官网引用详细参见:# Download and install the latest public Android SDK. # Edit build.properties at the top level of the project, and change the android-home property to point t

12、o the SDK install location # Download Proguard, version 4.4 minimum, and install it where you like. # Edit build.properties and set proguard-jar to the full path (including the filename) of the 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 13 页 - - - - - - - -

13、 - ProGuard library. # Build core; Note that core must be built without debug symbols to avoid an incompatibility between proguard and the Android tool chain: cd core ant clean build-no-debug # Build android: cd ./android ant 另外我上传已经编译我的jar 包供大家下载: http:/ 条码扫描二维码扫描 ZXing android 源码简化前言最近公司的Android项目

14、需要用到摄像头做条码或二维码的扫描,Google一下,发现一个以Apache License 2.0开源的 ZXing项目。 Zxing项目里的Android实现太过复杂多余东西太多,得对其进行简化。前提条件下载源代码:点击这里编译核心库: Zxing的主页上有介绍具体步骤,大家也可以参照这篇博文:android 条码识别软件开发全解析(续 2 详解绝杀! )导入项目打开 Eclipse 导入源码中的Android 项目,然后右击项目选择“Build path” Add External Archives 把核心库core.jar文件加入到项目中。此时编译一下项目,会发现报错, “Multip

15、le substitutions specified in non-positional format; did you mean to add the formatted=false attribute?” 之类的。打开raw 下的 Values 发现错误是在一个上。这里把“ preferences_custom_product_search_summary” 里的 %s %f 全部都改成 %1$s %1$f (因为我们用不到多国语言,建议只保留默认的Value , 其他全部删除) 。原因:由于新的 SDK 采用了新版本的aapt(Android项目编译器) ,这个版本的aapt编译起来会比

16、老版本更加的严格,然后在Android最新的开发文档的描述String的部分,已经说明如何去设置%s 等符号名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 13 页 - - - - - - - - - “If you need to format your strings using String.format(String, Object.) , then you can do so by putting your format arguments in the str

17、ing resource. For example, with the following resource:Hello, %1$s! You have %2$d new messages.In this example, the format string has two arguments: %1$s is a string and %2$d is a decimal number. You can format the string with arguements from your application.“经过以上步骤后项目应该就可以运行了。但是 ZXing的 android项目东西

18、太多了,有很多是我们不需要的,得新建另一个项目简化它。简化在开始前大致介绍一下简化ZXing需要用到各个包、类的职责。CaptureActivity。这个是启动Activity 也就是扫描器(如果是第一安装,它还会跳转到帮助界面) 。CaptureActivityHandler解码处理类,负责调用另外的线程进行解码。DecodeThread解码的线程。com.google.zxing.client.android.camera包,摄像头控制包。ViewfinderView自定义的View ,就是我们看见的拍摄时中间的框框了。新建另一个项目新建另一个项目将启动的Activity命名为 Captu

19、reActivity,并导入核心库。项目新建完成后我们打开CaptureActivity的布局文件, 我这里为main 。 把里面的 XML 修改为: 1 3 6 7 10名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 13 页 - - - - - - - - - 1314可以看到在XML 里面用到了ViewfinderView自定义 view 。所以新建一个View 的包,然后把: ViewfinderView和 ViewfinderResultPointCallbac

20、k靠到里面(记得对应修改 XML 里面的包)。打开 CaptureActivity覆盖 onCreate方法: 1 Override 2 publicvoidonCreate(Bundle savedInstanceState) 3 super .onCreate(savedInstanceState); 4 setContentView(R.layout.main); 5 / 初始化 CameraManager 6CameraManager.init(getApplication(); 7 8 viewfinderView = (ViewfinderView) findViewById(R.

21、id.viewfinder_view); 9 txtResult = (TextView) findViewById(R.id.txtResult); 10hasSurface = false; 11inactivityTimer = newInactivityTimer(this); 12 这里调用到的CameraManager类是控制摄像头的包里的类。新建一个camera包把:com.google.zxing.client.android.camera里面的类全部拷入,另外我把PlanarYUVLuminanceSource也拷入到这个包里面。根据错误的提示来修正代码,主要是修改正包结构。

22、(整个简化的流程都是如此:“ 根据错误提示,修改代码” )。在修改的过程中,有很多是关于R 资源的问题, 在此我们需要将Values 里面的两个xml 资源文件拷入项目中:colos.xml 和 ids.xml 。ctrl+b一下看看error 是不是少了很多。在 CameraManager中有些地方需要用到项目的配置,这里需要把配置直接写入代码中:/ SharedPreferencesprefs = PreferenceManager.getDefaultSharedPreferences(context); /是否使用前灯/ if (prefs.getBoolean(Preferences

23、Activity.KEY_FRONT_LIGHT, false) / FlashlightManager.enableFlashlight(); / FlashlightManager.enableFlashlight();名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 13 页 - - - - - - - - - 使用摄像头需要加入相应的权限: 当 View 和 camera 包里的错误修正完成后,我们继续来看CaptureActivity。覆盖 onResume方法初

24、始化摄像头:Override protectedvoidonResume() super .onResume(); SurfaceViewsurfaceView = (SurfaceView) findViewById(R.id.preview_view); SurfaceHoldersurfaceHolder = surfaceView.getHolder(); if (hasSurface) initCamera(surfaceHolder); else surfaceHolder.addCallback(this); surfaceHolder.setType(SurfaceHolder

25、.SURFACE_TYPE_PUSH_BUFFERS); decodeFormats = null; characterSet = null; playBeep = true; AudioManageraudioService = (AudioManager) getSystemService(AUDIO_SERVICE); if (audioService.getRingerMode() != AudioManager.RINGER_MODE_NORMAL) playBeep = false; initBeepSound(); vibrate = true; initCameraSurfac

26、eHolder接口实现名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 13 页 - - - - - - - - - initCamera () 方法用于初始化摄像头,如果排除了所有的error ,运行项目时就可以看到大致扫描界面了。 surfaceHolder.addCallback(this);表示让 CaptureActivity实现其 callback接口。handler = new CaptureActivityHandler(this, decodeForma

27、ts, characterSet) 用于进行扫描解码处理。解码上面的步骤主要都是用于对摄像头的控制,而解码的真正工作入口是在CaptureActivityHandler里面的。新建一个Decoding包把以下文件拷入包中:CaptureActivityHandler DecodeFormatManager DecodeHandler DecodeThread FinishListener InactivityTimer Intents 由于我们的包结构和Zxing项目的有所不同所以需要注意一下类的可访问性同样开始 ctrl+B编译一下,然后开始修正错误。在 CaptureActivityHan

28、dler里把 handleMessage里的部分方法先注释掉如:“ decode_succeeded ”分支,这是解码成功时调用CaptureActivity展示解码的结果。在 DecodeThread类里,修改部分涉及Preference配置的代码:DecodeThread(CaptureActivity activity, VectordecodeFormats, String characterSet, ResultPointCallbackresultPointCallback) this.activity = activity; handlerInitLatch = newCount

29、DownLatch(1); hints = newHashtable(3); / / The prefs cant change while the thread is running, so pick them up once here. / if (decodeFormats = null | decodeFormats.isEmpty() / SharedPreferencesprefs = PreferenceManager.getDefaultSharedPreferences(activity); / decodeFormats = new Vector(); / if (pref

30、s.getBoolean(PreferencesActivity.KEY_DECODE_1D, true) / decodeFormats.addAll(DecodeFormatManager.ONE_D_FORMATS); / / if (prefs.getBoolean(PreferencesActivity.KEY_DECOD名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 13 页 - - - - - - - - - E_QR, true) / decodeFor

31、mats.addAll(DecodeFormatManager.QR_CODE_FORMATS); / / if (prefs.getBoolean(PreferencesActivity.KEY_DECODE_DATA_MATRIX, true) / decodeFormats.addAll(DecodeFormatManager.DATA_MATRIX_FORMATS); / / if (decodeFormats = null | decodeFormats.isEmpty() decodeFormats = new Vector(); decodeFormats.addAll(Deco

32、deFormatManager.ONE_D_FORMATS); decodeFormats.addAll(DecodeFormatManager.QR_CODE_FORMATS); decodeFormats.addAll(DecodeFormatManager.DATA_MATRIX_FORMATS); hints.put(DecodeHintType.POSSIBLE_FORMATS, decodeFormats); if (characterSet != null) hints.put(DecodeHintType.CHARACTER_SET, characterSet); hints.

33、put(DecodeHintType.NEED_RESULT_POINT_CALLBACK, resultPointCallback); 这里是设置解码的类型,我们现在默认将所有类型都加入。错误类型基本上都是:包结构、PreferencesActivity的配置、类可访问性的问题。根据错误提示耐心把错误解决。返回解码结果还记得在 CaptureActivityHandler的 messagehandler里注销掉的Case 分支吗?现在 CaptureActivity里实现它。publicvoidhandleDecode(Result obj, Bitmap barcode) inactivi

34、tyTimer.onActivity(); viewfinderView.drawResultBitmap(barcode); playBeepSoundAndVibrate(); txtResult.setText(obj.getBarcodeFormat().toString() + : + obj.getText(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 13 页 - - - - - - - - - 最后ZXing的简化已基本完成,有几位是可以运行成功的?呵呵。下面是 CaptureActivity的源码 : CaputreActivity简化过的包结构图:简化后的ZXing更加方便我们了解ZXing项目是如何解码的。只要仔细查看源码,进行单点跟踪调试,相信大家很容易能理解。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 13 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁