Google ZXing系列講解(三)——ZXing 目錄結(jié)構(gòu)與主體流程

概要

本篇講解2個問題

  • ZXing Demo結(jié)構(gòu)
  • ZXing Demo 主體流程

ZXing 結(jié)構(gòu)

本系列涉及的都是Google ZXing Demo, 也就是源碼中的android目錄。從 Google ZXing系列講解(一)——導(dǎo)入AS 就提到 ZXing源碼中的目錄分類,包含內(nèi)容較多。從Android實際使用角度,會涉及 core, android-core, android-integration, android 四個目錄。

  • core 可以認(rèn)為是ZXing庫的核心算法,
  • android-core 中僅有一個文件 CameraConfigurationUtils.java, 該文件的說明是:
/**
 * Utility methods for configuring the Android camera.
 *
 * @author Sean Owen
 */
  • android-integration 僅有2個文件
IntentIntegrator.java
<p>A utility class which helps ease integration with Barcode Scanner via {@link Intent}s. This is a simple
  way to invoke barcode scanning and receive the result, without any need to integrate, modify, or learn the
  project's source code.</p>
 IntentResult.java
 <p>Encapsulates the result of a barcode scan invoked through {@link IntentIntegrator}.</p>

該jar包用于第三方應(yīng)用通過Intent調(diào)用ZXing app。

  • android
    ZXing Demo, 用于展示如何使用ZXing庫。
    該系列文章以android 目錄為研究對象, 分析如何使用ZXing。

ZXing Demo目錄結(jié)構(gòu)

目錄結(jié)構(gòu)圖

該Demo實現(xiàn)的功能很多, 掃描條形碼,二維碼。掃描書籍, 剪切板, 編碼, 掃描歷史記錄,分享,掃描WIFI。

  • book: 掃描結(jié)果是書籍信息,則進(jìn)行相關(guān)操作,包括搜索與展示書籍相關(guān)類。
  • camera: Camera相關(guān)操作包, open/ 是Camera打開相關(guān)類,CameraManager是核心管理類。
  • clipboard: 剪貼板
  • encode:編碼功能的各個組件集合,核心類為QRCodeEncoder
  • history:掃描歷史管理,核心類是HistoryManager
  • result: 掃碼結(jié)果被分為不同的類型,所有的類型,都定義對應(yīng)的xxxResultHandler來處理。
  • share: 將掃碼結(jié)果分享出去
  • wifi: 掃碼自動連接WIFI

ZXing Android 攝像頭啟動過程

在介紹ZXing Android Camera啟動過程前 ,先來看下掃碼總體流程

ZXing掃碼整體過程

掃碼過程

ZXing Android入口

帶UI界面的Android App都有一個入口Activity, 從AndroidManifest.xml中可以查驗

<activity android:name=".CaptureActivity"
          ......>
      <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
      </intent-filter>
    ... ...
</activity>

所以,類CaptureActivity就是ZXing Demo的入口Activity, 仔細(xì)查看其生命周期函數(shù),發(fā)現(xiàn)做了很多工作。

onCreate

    inactivityTimer = new InactivityTimer(this);
    beepManager = new BeepManager(this);
    ambientLightManager = new AmbientLightManager(this);
  • 創(chuàng)建一個Timer:如果設(shè)備使用電池供電,一段時間不活動之后結(jié)束activity
  • 創(chuàng)建一個BeepManager:主要用于掃描成功后提示聲的
  • 設(shè)置保持屏幕喚醒狀態(tài)

onResume

  • 初始化Camera:使用CameraManager,這個類主要提供關(guān)于Camera的一些基本操作
  • 初始化ViewfinderView:覆蓋在預(yù)覽圖(SurfaceView)上方的一個View,主要作用是增加了部分透明的取景框和掃描動畫;我們可以根據(jù)需要改變?nèi)【翱虻拇笮⌒螤?,改變掃描動畫等?/li>
  • 初始化SurfaceView

CaptureActivity類關(guān)系圖

Capture類關(guān)系圖

camera包結(jié)構(gòu)

camera包結(jié)構(gòu)

該package作用是管理camera,包括打開,關(guān)閉,配置camere, 閃光燈等。

  • CameraFacing: 枚舉類, 標(biāo)明前置攝像頭,后置攝像頭
  • OpenCamera: 表示已經(jīng)打開的Camera以及它的元數(shù)據(jù)
  • OpenCameraInterface :抽象于Camera之上的類,用于打開Camera并獲得數(shù)據(jù)
  • AutoFocusManager:Camera自動對焦相關(guān)
  • CameraConfigurationManager:用于讀取,分析,設(shè)置Camera參數(shù)
  • CameraManager: 核心類,相機(jī)管理類, 操作Camera的入口,用于預(yù)覽和解碼
  • FrontLightMode:枚舉類, 表示閃光燈的開,關(guān),自動
  • PreviewCallback:預(yù)覽回調(diào)類

ZXing Camera具體流程

ZXing Camera打開流程

以上流程圖,經(jīng)過手機(jī) log調(diào)試,內(nèi)容屬實! 該圖展示,ZXing 打開Camera 掃描 1D/2D 主體流程。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,323評論 25 708
  • 基于Google ZXing 3.3.0穩(wěn)定版分析,基本的流程講解。會涉及如何編寫基于ZXing庫的APK; 如何...
    檀木丁閱讀 40,018評論 15 42
  • afinalAfinal是一個android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,898評論 2 45
  • 濱海的小城市,空氣中都彌漫著潮濕的咸腥味,海浪一下一下的拍著沙灘,時急時緩。我光著腳丫站在沙灘上,舉著手機(jī)...
    這朵花愛笑閱讀 605評論 0 1
  • 大學(xué)獨(dú)自一人去外省讀書,曾經(jīng)想過是否有同一個市的朋友一起在這個學(xué)校讀書,驚喜的是不僅是同一個市的還是同一個縣城。我...
    諪諪_0c2f閱讀 410評論 0 0

友情鏈接更多精彩內(nèi)容