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