基于Android平臺的雙網(wǎng)雙待的設(shè)計方法
3. Android 平臺雙網(wǎng)雙待軟件設(shè)計
本文引用地址:http://butianyuan.cn/article/139563.htmAndroid 平臺雙網(wǎng)雙待功能設(shè)計主要涉及到Android 軟件平臺的四大功能模塊,分別是Linux 內(nèi)核層、本機庫/運行時、應用程序框架層以及應用程序?qū)?。其中在應用程序?qū)永肁ndroid的各種組件API 實現(xiàn)PhoneApp 并在Linux 內(nèi)核層提供相應的底層驅(qū)動。Android 系統(tǒng)架構(gòu)如圖2 所示。
圖2 Android 系統(tǒng)架構(gòu)
(1)Linux 內(nèi)核。
Android 系統(tǒng)平臺是基于優(yōu)化的Linux 內(nèi)核來開發(fā)的,主要添加了一個名為Goldfish 的虛擬CPU 以及Android 運行所需的特定驅(qū)動代碼。該層用來提供系統(tǒng)的底層服務,提供諸如內(nèi)存管理、進程管理、設(shè)備驅(qū)動、安全管理、電源管理等驅(qū)動模塊,作為一個虛擬的中間層,該層位于硬件與其他軟件層之間,采用YAFFS2 文件系統(tǒng),同時也是手機軟硬件的連接層。在系統(tǒng)開發(fā)中,也需要針對自身的硬件模塊添加對應的驅(qū)動,如Phone 驅(qū)動、GPRS 驅(qū)動、GPS 驅(qū)動、液晶和觸摸板驅(qū)動等。
(2)本機庫/Android 運行時。
這些共享庫都是利用C 和C + + 語言編寫的,且針對電話使用的特定的硬件架構(gòu)進行了編譯,并已由手機制造商預先安裝到手機上。本機庫主要包含: 標準C 函數(shù)庫、媒體功能庫、瀏覽器引擎、2D 和3D 圖形庫及SQLite 引擎等。開發(fā)者利用這些功能可以方便地開發(fā)出人機界面友好的應用程序接口,極大地縮短了開發(fā)過程。
Android 運行時包含一組Java 內(nèi)核庫和Dalvik 虛擬機,它們有效地優(yōu)化了Java 程序的運行過程。
(3)應用程序框架層。
Android 應用程序開發(fā)是基于框架和組件的,該層提供了在創(chuàng)建應用程序時需要使用的各種高級構(gòu)建塊,因此在該層中,開發(fā)人員擁有訪問框架API 的全部權(quán)限,在開發(fā)應用程序時調(diào)用Android 本身自帶的許多組件,也可以開發(fā)新的組件,并將該組件放入應用程序框架中,以供自己和其它應用程序調(diào)用,這樣的模塊大大提高了應用程序的開發(fā)效率。
(4)應用程序?qū)印?/p>
Android 本身包含一些由Java 開發(fā)的核心應用程序,如桌面、短信收發(fā)程序、日歷、電話通訊錄、瀏覽器、E-mail 客戶端等,開發(fā)者還可以在此基礎(chǔ)上開發(fā)出更多具有特色的Android 應用程序,如特效相機、播放器、充電相框等。
3. 1 Android 雙網(wǎng)雙待實現(xiàn)方案
在GSM 單模狀態(tài)下通過添加一套支持CDMA 的無線接口層RIL 來實現(xiàn)雙網(wǎng)雙待機制的方案如圖3 所示。
圖3 Android 雙網(wǎng)雙待電話部分結(jié)構(gòu)
在PhoneAPP 中new 一個GSMPhone 和一個CDMAPhone,分別對應兩種framework (不同的CallTracker)和RIL (不同的RIL),實現(xiàn)單模向雙網(wǎng)雙待的改進。
圖中CallLiST 主要用來管理兩個電話之間的切換,以避免如掛掉某一個通話卻導致另一個的通話也結(jié)束等一系列界面顯示出錯問題。CallList 模塊管理兩個電話以及這兩個電話所有的通話,通過一個CallList 表來存儲兩個電話的所有呼叫。上層界面調(diào)用這個CallList 表來處理兩個電話的切換。在framework 中new 一個CallList 的類來存儲phone 的多個電話以便上層顯示。
CallList 類中包含attached(),detach(),update(),clear(),get-CurrentCall(),getDefault()等方法。使得兩個Phone 的Call 得到控制。掛掉的時候就從表中刪除,來電話的時候加入表中。
上層顯示的時候,只要調(diào)用CallList 中的最后存入Call 就不會出現(xiàn)界面出錯的情況。
在包含GSM 網(wǎng)絡(luò)和CDMA 網(wǎng)絡(luò)的雙網(wǎng)雙待模塊中,因為有了CDMA 部分的整合不少代碼已經(jīng)發(fā)生改變,原來的CallTracker只被GSM 使用,在這里改為CallTracker 和GsmCallTracker,抽象出CallTracker 基類,使其也可以被CDMA 利用; GSMCall 變成GsmCall,更加符合統(tǒng)一的命名規(guī)則; 另外,比如pppd 的啟動部分,也從Java 框架層放到RIL 層。
3. 2 Android RIL 層的改進
在Android 系統(tǒng)中RIL 是電話系統(tǒng)的本地實現(xiàn),它提供了Android 電話服務(android. telephony)與無線電硬件之間的抽象層,主要負責AT 命令的發(fā)送和響應解析,這也是電話服務的實現(xiàn)基礎(chǔ)。另外,RIL 還負責數(shù)據(jù)的可靠傳輸。因此RIL 在Android電話部分起核心作用。本方案設(shè)計過程中主要涉及到RIL以下四個部分的修改:
(1)由于本方案維護兩個RIL 實例,因此RIL 實例管理者(RIL instance Manager)需要各自負責與android telephony 通過socket 進行連接。每個RIL 實例針對各自的SIM 卡提供專用的通信通道來進行modem 側(cè)的通信服務。
(2)無線電仲裁管理者(Radio Service Arbitration Manager),這是實現(xiàn)雙網(wǎng)雙待方案中新增加的模塊,主要用來為每個RIL 實例進行語音和短消息業(yè)務的仲裁,數(shù)據(jù)服務的仲裁由MODEM 來進行。
(3)RIL 事件分配機(RIL Event Dispatcher),用于分配RIL請求及AMSS 事件到通信服務管理模塊進行的處理。
(4)無線電服務管理者(Radio Service Manager),Android 通話應用首先需要通過子系統(tǒng)信息來從framework 層獲得通話服務,然后每個SIM 卡子系統(tǒng)將會映射到一個特定的RIL 實例ID上,服務管理將使用RIL 實例的ID 來識別子系統(tǒng)ID 中DSS API的參數(shù)。
評論