概要
本篇講解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 主體流程。