Delphi Android 將Google ZXing 整合(調用Jar檔案)

來源:互聯網
上載者:User

標籤:ini   monkey   缺點   create   java   3.0   ==   其他   perm   

     前篇文章介紹了在delphi App(以下簡稱App)中可使用intent來調用Google ZXing 條碼掃描器(以下簡稱zx),其各有優缺點,優點是我們不需關注zx本身的細節,只需調用其介面即可,缺點是需額外安裝zx掃描程式,如此一來客戶體驗就不夠好,那麼可否將zx直接整合到App中呢,答案是可以, 但實際操作起來會稍顯繁瑣,我們具體來看下過程,其中分兩部分:第一部分介紹如何配置編譯zx源碼,第二部分介紹如何與App整合。

 

第一部分:zx源碼的配置和編譯1:下載源碼

  我選用的是2.3.0版本, 下載解壓後如: 

我們只需用到三個檔案夾,其中

  core: 核心庫檔案。

  Android-integration:內建的整合庫,編譯時間要用到。

  android:內建樣本掃描程式(zx)。

2.將核心庫打包為jar

  這裡我是先將core和android-integratio分別打包成jar來使用,你也可以直接使用源碼。開啟eclipse, 建立Android Application  Project,名字可任取,不需建立Activity,完成後在項目下建立src檔案夾,將core中com檔案夾整體複製到src中,右鍵項目,選擇Export,在視窗中選擇Java裡的JAR file:

 

只選取src檔案夾, 這裡匯出名為ZXCore2.3.jar,android-integratio做同樣的操作後得到ZXIntegration2.3.jar留著待用。

3.編譯zx

複製一份Android檔案夾(名字可自取),開啟eclipse, 建立 Android  from existing code, 選取上述檔案夾,完成之後項目中就有CaptureActivity(zx),然後匯入上面打包好的兩個jar檔案,如所示:

Build一下,如果沒有出錯提示,說明環境已經配置成功。

4.源碼稍作修改,以便delphi能正常回調

  a.開啟CaptureActivity.java,注釋掉onCreateOptionsMenu 事件,將菜單暫時隱藏掉,讓它看起來更像個模組(你也可保留,但相關功能的資源檔必鬚髮布且需在AndroidManifest添加相應Activity(如涉及到))。

  b.定位到 onResume事件: 注釋以下兩塊代碼:

現在將工程重新Build或運行一次後就等待和App整合了。

 

第二部分 App整合zx

 

1.整合資源

  建立Firemonkey Mobile App, 在根目錄建立如下檔案夾:

將 CaptureActivity中res裡的檔案複製到capture_assets中(本例中capture_assets檔案夾存放的是一些協助檔案,未使用到,可以刪除)。

2.建立本地回呼函數

  建立NativeActivitySubclass.java, 用於回調 zx 完成掃描後的 onActivityResult事件,該類繼承自delphi NativeActivity,並在裡面註冊了一個Native回調方法,將 NativeActivitySubclass.java 產生 NativeActivitySubclass.dex的詳細過程就不贅述了,這裡說一下大致流程, 先將delphi 內建的classes.dex 還原成embarcadero.jar,使用 javac 帶上 embarcadero.jar和 android.jar環境編譯NativeActivitySubclass.java得到NativeActivitySubclass.class, 使用jar cvf 命令 將NativeActivitySubclass.class打包成jar,最後使用dx產生NativeActivitySubclass.dex。

3.合并dex

  這裡需要合并3個檔案, Delphi內建的classes.dex, NativeActivitySubclass.dex,還有一個在CaptureActivity項目裡的bin\classes.dex,使用DexMerger合并上面3個dex為一個classes.dex, 至此功能已經整合完畢。

4.添加許可權

  delphi IDE > project > options > uses permission中對照下面添加許可權:

5. 修改AndroidManifest.template.xml

 

  a:將預設名稱改成[package].[NativeActivitySubclass](視你的名稱而定);

  b.添加CaptureActivity(這裡只添加掃描功能,其他可按需添加)。

6.發布

  a. Project > deployment:

    將目錄裡Capture_res打包到相應目錄(不必將所有檔案都打包進去,我刪除了一些多語言和協助檔案(如果你的本地語言不是簡體  中文,可以自己添加);

  b.將delphi內建的classes.dex替換成整合後的classes.dex。

 

7. Build App, 調用zx

 既然zx已被整合,那麼調用就非常簡單了,只需三行代碼即可(詳細調用可見Demo):

 

 

[delphi] view plain copy 
  1. procedure CallInternalZXing;  
  2. var  
  3.   LIntent: JIntent;  
  4. begin  
  5.   LIntent := TJIntent.JavaClass.init;  
  6.   LIntent.setClassName(SharedActivityContext, StringToJString(‘com.google.zxing.client.android.CaptureActivity‘));  
  7.   SharedActivity.startActivityForResult(LIntent, 0);  
  8. end;  

 

 

App運行(注意原先的"條碼掃描器"已變成我們的App名稱了):

 

返回編碼格式和解析結果:

 

完整例子(包含ZXing2.3源碼, 修改版CaptureActivity和詳細Demo):

http://download.csdn.net/detail/flcop/6993665

 

http://blog.csdn.net/flcop/article/details/20240703

Delphi Android 將Google ZXing 整合(調用Jar檔案)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.