android 條碼識別軟件開發(fā)全解析_第1頁
android 條碼識別軟件開發(fā)全解析_第2頁
android 條碼識別軟件開發(fā)全解析_第3頁
android 條碼識別軟件開發(fā)全解析_第4頁
android 條碼識別軟件開發(fā)全解析_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

android條碼識別軟件開發(fā)全解析android條碼識別軟件開發(fā)全解析android的有一大特色就是可以識別條形碼得到URL可以直接訪問地址并下載,這個功能無疑為用戶提供了很大的方便。于是在android上開發(fā)條碼識別軟件肯定是很有必要的!我在網(wǎng)上GOOGLE了一下發(fā)現(xiàn)這類的資料特別少,而且又有很多人在問如何開發(fā)。這里我就分享一下自己的經(jīng)驗。這里我們會用到一個開源組件zxing,大體上所有流行的條碼都支持(一維碼,二維碼),并且識別是最好的在所有開源里面。我將詳細講解ZXing的使用官網(wǎng)地址:http://code.google.eom/p/zxing/這個開源組件支持的條碼有如下:UPC-AandUPC-EEAN-8andEAN-13Code39Code93Code128QRCodeITFCodabarRSS-14(allvariants)DataMatrixPDF417('alpha'quality)下面我會詳細講解zxing的使用,將在我下幾篇博客中詳細講解。今天又很晚了,時間總是過的很快啊,尤其是晚上!呵呵,這里先貼出一些效果圖吧!下幾篇我的博客文章再詳細講解,大致有如下幾個方面:zxing的編譯打包zxing的簡單調(diào)用zxing生成自定義二維碼識別圖片中的條碼效果如圖:自定義二維條碼tank123FakeStSanFrancisco,CA94102

888-888-88

blcgs,cotn/

tankaixiong/識別圖片中的條碼:android條碼識別軟件開發(fā)全解析(續(xù)1詳解)前天我發(fā)了一篇關于android開發(fā)條碼識別軟件應用程序的博客,沒想到竟很受關注。我也挺受鼓舞的,好吧,我接上次的博客繼續(xù)往下寫。前篇有人講我寫的沒有實質(zhì)內(nèi)容,我接受建議,這里我就帶大家體驗一下最簡單最直接的完美體驗。編寫你的第一個android條碼識別程序。zxing的簡單使用!第一步:下載zxing組件:我上篇也簡單介紹了一下這個組件,這里也不啰嗦了。下載兩個東東源碼和文檔說明:地址下如/p/zxing/downloads/detail?name=ZXing-1.6.zip&can=2&q=BarcodeScanner3.5.apk這個是編譯好的一個可安裝的apk程序!這個后面將用到。地址如下/p/zxing/downloads/detail?name=BarcodeScanner3.51b1.apk&can=2&q=第二步:模擬器已完全打開后安裝BarcodeScanner3.5.apkcmd中cd至Usdk目錄利用adb命令安裝BarcodeScanner3.5.apkadbinstallBarcodeScanner3.5.apk所在目錄,請確定安裝成功了。第三步:ok終于到編碼了!國|代碼對應的xml如下01<?xmlversion="1.0"encoding="utf-8"?>02〈LinearLayoutxmlns:android二"/apk/res/android"0android:orientation="vertical"android:layout_width="fill_pare3nt"04android:layout_height="fill_parent">05<TextViewandroid:layout_width="fill_parent"0android:layout_height="wrap_content"android:text="@string6/hello"07android:id="@+id/mytxt"/>070808〈Buttonandroid:text二"點我開始掃描"android:id="@+id/mybtn"1android:layout_width="wrap_content"android:layout_height="w0rap_content"></Button>11</LinearLayout>第三步:0K我們趕快看看效果吧,運行。你會看到如下:模擬器當然沒有攝像頭設備是掃描不到結(jié)果的。總結(jié):這里只是做了一個簡單的調(diào)用,調(diào)用簡單但有一個很大的缺陷,這里我們要安裝兩個程序!在安裝BarcodeScanner3.5.apk為前題,這明顯不能接受!所以接下來我將在下篇博客繼續(xù)深入。敬請關注!android條碼識別軟件開發(fā)全解析(續(xù)2詳解絕殺?。╆P于andriod上實現(xiàn)條碼識別,我前面已經(jīng)講了一些簡單的應用,上篇講過的應用zxing時必需多安裝其組件這是不能接受的,我想大家都已經(jīng)想到解決的方法了吧,呵呵,其實正真學習一個東西,從其最基本的東東開始--大家都知道就是源碼了。0K,我們要深入條碼的識別的話自然就要去讀zxing的源碼,你讀完之后就不只是懂得其源碼了,你會發(fā)現(xiàn)你其實收獲到的不僅僅只有這點,還有更多的東西,比如你更深入學習android的又一個應用示例對Android的開發(fā)多了了解。

官網(wǎng)源碼提供免費下載,但幫助文檔不是很全,最近有在讀它的源碼,去調(diào)試運行它的源碼對你去理解了解其結(jié)構(gòu)是很有幫助的。官網(wǎng)上只提供源碼的下載,并沒有提供編譯好的開發(fā)包,也就是說你自己下過來后還要自己編譯,不然把下下來的源碼程序?qū)氲絤yeclipse中會報錯。importimportImportimportzLm^ort如圖:importimportImportimportzLm^ortcom.g-oogle.zxing.BinaryBitrnap;」n?5?n??E?.mr■皿mmumiArnww皿譏?f皿心卮coin?卬口ocrle?exinq?MultLFouinatRe對于新手可能有些不知下手,這里我就講下zxing的編譯,為后面的開發(fā)做好一個最基本的準備!第一步:準備包http://code.google.eom/p/zxing/下載編譯zxing下載ant地址/下載proguard地址/index.html#/downloads.html解壓:zxing-1.6目錄結(jié)構(gòu)下:pertiesbuild.xml第二步:配置環(huán)境變量。打開perties修改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環(huán)境變量ANT_HOMEE:\MyLiB\java\ANT\apache-ant-1.8.1PATHE:\MyLiB\java\ANT\apache-ant-1.8.1\bincmd中ant回車出現(xiàn)Buildfile:build.xmldoesnotexist!Buildfailed表現(xiàn)成功!第三步:開始編譯

cd到core目錄然后ant!BUILDSUCCESSFULTotaltime:*second表示成功編譯!然后編譯androidcd../androidant好了!有了核心包后我們可以就可以導入到項目工程里去了,現(xiàn)在是不是就不報錯了!而且還可以直接運行的!如圖:+國ViewfinderVisw.Java+J2aing:Tee七人匚七1」a^aAndroid2.2EgenAndroid2.2+5-三Referenced.Libraries?■區(qū)core,jar-${euternsl-lLbE-folder}assetsLiBsImportcoin?googl亡?SKing?BinaryBit-inap;Importcoin,goojl亡.Exinj.Mult-iFormat-R亡厲厲亡匸;jjnpDrtcom.google.zxing.ReaderExcept-ion;importcom.google.EKing.Result;unportcom.google.zx:mon.HybridBinarizer;■im>-tartai?1--arirl'rritrl廠bhVi&l--blire■ZXingTestActivity為其zxing運用的例子,這是學習zxing的一個很好的幫助!這個例子運行前提也是必需先安裝BarcodeScanner3.5.apkandroid目錄則是前篇我博客講調(diào)用時必需安裝的一個組件BarcodeScanner3.5.apk的源碼。呵呵,我想大家就知道了,對了,想不安裝我們可以直接在源碼上進行修改并進行編譯,就ok了。希望我的這幾篇文章可以給大家有些幫助,也算引個方向,最后更深入學習代碼,就只能看自己了!大家肯定比我聰明,會很快讀懂源碼并很快應用起來,如有什么問題希望大家一起探討學習,不斷進步!下幾篇博客我想可以寫一些基于zxing條碼識別自己的運用程序示例了!如果大家有興趣我會和大家一起分享!好了,今天就寫到這里了!另附編譯說明:官網(wǎng)引用詳細參見:DownloadandinstallthelatestpublicAndroidSDK.Epertiesatthetopleveloftheproject,andchangetheandroid-homepropertytopointtotheSDKinstalllocationDownloadProguard,version4.4minimum,andinstallitwhereyoulike.Epertiesandsetproguard-jartothefullpath(includingthefilename)oftheProGuardlibrary.Buildcore;NotethatcoremustbebuiltwithoutdebugsymbolstoavoidanincompatibilitybetweenproguardandtheAndroidtoolchain:cdcoreantcleanbuild-no-debugBuildandroid:cd../androidant另外我上傳已經(jīng)編譯我的jar包供大家下載:/tankaixiong/zxing%e6%a0%b8%e5%bf%83%e5%8c%85.rar條碼掃描二維碼掃描ZXingandroid源碼簡化刖言最近公司的Android項目需要用到攝像頭做條碼或二維碼的掃描,Google一下,發(fā)現(xiàn)一個以ApacheLicense2.0開源的ZXing項目。Zxing項目里的Android實現(xiàn)太過復雜多余東西太多,得對其進行簡化。前提條件下載源代碼:點擊這里編譯核心庫:Zxing的主頁上有介紹具體步驟,大家也可以參照這篇博文android條碼導入軟件開發(fā)全目析(續(xù)丄詳解絕殺?。┐蜷_Eclipse導入源碼中的Android項目,然后右擊項目選擇“Buildpath”》"AddExternalArchives"把核心庫core.jar文件加入到項目中。此時編譯一下項目,會發(fā)現(xiàn)報錯,“Multiplesubstitutionsspecifiedinnon-positionalformat;didyoumeantoaddtheformatted="false"attribute"之類的。打開raw下的Values發(fā)現(xiàn)錯誤是在一個vString〉上。這里把“preferences_custom_product_search_summary”里的%s%f全部都改成%1$s%1$f(因為我們用不到多國語言,建議只保留默認的Value,其他全部刪除)。原因:由于新的SDK采用了新版本的aapt(Android項目編譯器),這個版本的aapt編譯起來會比老版本更加的嚴格,然后在Android最新的開發(fā)文檔的描述String的部分,已經(jīng)說明如何去設置%s等符號

“IfyouneedtoformatyourstringsusingString.format(String,Object...),thenyoucandosobyputtingyourformatargumentsinthestringresource.Forexample,withthefollowingresource:<stringname="welcome_messages">Hello,%1$s!Youhave%2$dnewmessages.</string>Inthisexample,theformatstringhastwoarguments:%1$sisastringand%2$disadecimalnumber.Youcanformatthestringwitharguementsfromyourapplication...“經(jīng)過以上步驟后項目應該就可以運行了。但是ZXing的android項目東西太多了,有很多是我們不需要的,得新建另一個項目在開始前大致介紹一下簡化ZXing需要用到各個包、類的職責。CaptureActivity。這個是啟動Activity也就是掃描器(如果是第一安裝,它還會跳轉(zhuǎn)到幫助界面)。CaptureActivityHandler解碼處理類,負責調(diào)用另外的線程進行解碼。DecodeThread解碼的線程。com.google.zxing.client.android.camera包,攝像頭控制包。新建另一個項目將啟動的Activity命名為CaptureActivity,并導入核心庫。項目新建完成后我們打開CaptureActivity的布局文件,我這里為main。把里面的XML修改為:1<FrameLayoutxmlns:android="/apk/res/android"2android:layout_width="fill_parent"android:layout_height="fill_parent">3<SurfaceViewandroid:id="@+id/preview_view"4android:layout_width="fill_parent"android:layout_height="fill_parent"5android:layout_centerInParent="true"/>67<com.Zxing.Demo.view.ViewfinderView8android:id="@+id/viewfinder_view"android:layout_width="fill_parent"9android:layout_height="fill_parent"android:background="@android:color/transparent"/>10<TextViewandroid:layout_width="wrap_content"11android:id="@+id/txtResult"12android:layout_height="wrap_content"android:text="@string/hello"/>

13</FrameLayout>可以看到在XML里面用到了ViewfinderView自定義view。所以新建一個View的包,然后把:ViewfinderView和ViewfinderResultPointCallback靠到里面(記得對應修改XML里面的包)。打開CaptureActivity覆蓋onCreate方法:1@Override2publicvoidonCreate(BundlesavedInstanceState){3super.onCreate(savedInstanceState);4setContentView(R.layout.main);5//初始化CameraManagerCameraManager.init(getApplication());78viewfinderView=(ViewfinderView)findViewById(R.id.viewfinderview);9txtResult=(TextView)findViewById(R.id.txtResult);10hasSurface=false;11inactivityTimer=newInactivityTimer(this);12}這里調(diào)用到的CameraManager類是控制攝像頭的包里的類。新建一個camera包把:com.google.zxing.client.android.camera里面的類全部拷入,另外我把PlanarYUVLuminanceSource也拷入到這個包里面。根據(jù)錯誤的提示來修正代碼,主要是修改正包結(jié)構(gòu)。(整個簡化的流程都是如此:“根據(jù)錯誤提示,修改代碼”)。[JJAutoFocusCa11baclkijava匚曰meraConfigurationManager.javaQCameraMsrraaer.java國Fla5hIightMarfager.java[T|PlanarVUVLuminanceSource-寸衛(wèi)[T]Prev\ewCa11back.javs在修改的過程中,有很多是關于R資源的問題,在此我們需要將Values里面的兩個xml資源文件拷入項目中:colos.xml和ids.xml。ctrl+b—下看看error是不是少了很多。在CameraManager中有些地方需要用到項目的配置,這里需要把配置直接寫入代碼中://SharedPreferencesprefs=PreferenceManager.getDefaultSharedPreferences(context);/是否使用前燈//if(prefs.getBoolean(PreferencesActivity.KEY_FRONT_LIGHT,false)){//FlashlightManager.enableFlashlight();//}FlashlightManager.enableFlashlight();

使用攝像頭需要加入相應的權(quán)限:<uses-permissionandroid:name="android.permission.CAMERA"></uses-permission><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission><uses-featureandroid:name="android.hardware.camera"/><uses-featureandroid:name="android.hardware.camera.autofocus"/><uses-permissionandroid:name="android.permission.VIBRATE"/><uses-permissionandroid:name="android.permission.FLASHLIGHT"/>當View和camera包里的錯誤修正完成后,我們繼續(xù)來看CaptureActivity。覆蓋onResume方法初始化攝像頭:@OverrideprotectedvoidonResume(){super.onResume();SurfaceViewsurfaceView=(SurfaceView)findViewById(R.id.previewview);SurfaceHoldersurfaceHolder=surfaceView.getHolder();if(hasSurface){initCamera(surfaceHolder);else{surfaceHolder.addCallback(this);surfaceHolder.setType(SurfaceHolder.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();vibratetrue;}initCameraSurfaceHolder接口實現(xiàn)

initCamera()方法用于初始化攝像頭,如果排除了所有的error,運行項目時就可以看到大致掃描界面了。surfaceHolder.addCallback(this);表示讓CaptureActivity實現(xiàn)其callback接口。handler=newCaptureActivityHandler(this,decodeFormats,characterSet)用于解碼碼處理。上面的步驟主要都是用于對攝像頭的控制,而解碼的真正工作入口是在CaptureActivityHandler里面的。新建一個Decoding包把以下文件拷入包中:CaptureActivityHandlerDecodeFormatManagerDecodeHandlerDecodeThreadFinishListenerInactivityTimerIntents由于我們的包結(jié)構(gòu)和Zxing項目的有所不同所以需要注意一下類的可訪問性同樣開始ctrl+B編譯一下,然后開始修正錯誤。在CaptureActivityHandler里把handleMessage里的部分方法先注釋掉如:

“decode_succeeded”分支,這是解碼成功時調(diào)用CaptureActivity展示解碼的結(jié)果。在DecodeThread類里,修改部分涉及Preference配置的代碼:DecodeThread(CaptureActivityactivity,Vector<BarcodeFormat>decodeFormats,StringcharacterSet,ResultPointCallbackresultPointCallback){this.activity=activity;handlerInitLatch=newCountDownLatch(1);hints=newHashtable<DecodeHintType,Object>(3);////Theprefscan'tchangewhilethethreadisrunning,sopickthemuponcehere.//if(decodeFormats==null||decodeFormats.isEmpty()){//SharedPreferencesprefs=PreferenceManager.getDefaultSharedPreferences(activity);//decodeFormats=newVector<BarcodeFormat>();//if(prefs.getBoolean(PreferencesActivity.KEY_DECODE_1D,true)){//decodeFormats.addAll(DecodeFormatManager.ONE_D_FORMATS);//}//if(prefs.getBoolean(PreferencesActivity.KEYDECOD

E_QR,true)){//decodeFormats.addAll(DecodeFormatManager.QR_CODE_FORMATS);//}//if(prefs.getBoolean(PreferencesActivity.KEY_DECODE_DATA_MATRIX,true)){//decodeFormats.addAll(DecodeFormatManager.DATA_MATRIXFORMATS);//-}//}if(decodeFormats==null||decodeFormats.isEmpty()){decodeFormats=newVector<BarcodeFormat>();decodeFormats.addAll(DecodeFormatManager.ONE_D_FORMATS);decodeFormats.addAll(DecodeFormatManager.QR_CODE_FORMATS);decodeFormats.addAll(DecodeFormatManager.DATA_MATRIX_FORMATS);}hints.put(DecodeHintType.POSSIBLE_FORMATS,decodeFormats);if(cha

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論