基于Android平臺(tái)的雙網(wǎng)雙待的設(shè)計(jì)方法
在PhoneAPP 中new 一個(gè)GSMPhone 和一個(gè)CDMAPhone,分別對(duì)應(yīng)兩種framework (不同的CallTracker)和RIL (不同的RIL),實(shí)現(xiàn)單模向雙網(wǎng)雙待的改進(jìn)。
本文引用地址:http://www.ex-cimer.com/article/270832.htm圖中CallLiST 主要用來(lái)管理兩個(gè)電話之間的切換,以避免如掛掉某一個(gè)通話卻導(dǎo)致另一個(gè)的通話也結(jié)束等一系列界面顯示出錯(cuò)問(wèn)題。CallList 模塊管理兩個(gè)電話以及這兩個(gè)電話所有的通話,通過(guò)一個(gè)CallList 表來(lái)存儲(chǔ)兩個(gè)電話的所有呼叫。上層界面調(diào)用這個(gè)CallList 表來(lái)處理兩個(gè)電話的切換。在framework 中new 一個(gè)CallList 的類來(lái)存儲(chǔ)phone 的多個(gè)電話以便上層顯示。
CallList 類中包含attached(),detach(),update(),clear(),get-CurrentCall(),getDefault()等方法。使得兩個(gè)Phone 的Call 得到控制。掛掉的時(shí)候就從表中刪除,來(lái)電話的時(shí)候加入表中。
上層顯示的時(shí)候,只要調(diào)用CallList 中的最后存入Call 就不會(huì)出現(xiàn)界面出錯(cuò)的情況。
在包含GSM 網(wǎng)絡(luò)和CDMA 網(wǎng)絡(luò)的雙網(wǎng)雙待模塊中,因?yàn)橛辛薈DMA 部分的整合不少代碼已經(jīng)發(fā)生改變,原來(lái)的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)與無(wú)線電硬件之間的抽象層,主要負(fù)責(zé)AT 命令的發(fā)送和響應(yīng)解析,這也是電話服務(wù)的實(shí)現(xiàn)基礎(chǔ)。另外,RIL 還負(fù)責(zé)數(shù)據(jù)的可靠傳輸。因此RIL 在Android電話部分起核心作用。本方案設(shè)計(jì)過(guò)程中主要涉及到RIL以下四個(gè)部分的修改:
(1)由于本方案維護(hù)兩個(gè)RIL 實(shí)例,因此RIL 實(shí)例管理者(RIL instance Manager)需要各自負(fù)責(zé)與android telephony 通過(guò)socket 進(jìn)行連接。每個(gè)RIL 實(shí)例針對(duì)各自的SIM 卡提供專用的通信通道來(lái)進(jìn)行modem 側(cè)的通信服務(wù)。
(2)無(wú)線電仲裁管理者(Radio Service Arbitration Manager),這是實(shí)現(xiàn)雙網(wǎng)雙待方案中新增加的模塊,主要用來(lái)為每個(gè)RIL 實(shí)例進(jìn)行語(yǔ)音和短消息業(yè)務(wù)的仲裁,數(shù)據(jù)服務(wù)的仲裁由MODEM 來(lái)進(jìn)行。
(3)RIL 事件分配機(jī)(RIL Event Dispatcher),用于分配RIL請(qǐng)求及AMSS 事件到通信服務(wù)管理模塊進(jìn)行的處理。
(4)無(wú)線電服務(wù)管理者(Radio Service Manager),Android 通話應(yīng)用首先需要通過(guò)子系統(tǒng)信息來(lái)從framework 層獲得通話服務(wù),然后每個(gè)SIM 卡子系統(tǒng)將會(huì)映射到一個(gè)特定的RIL 實(shí)例ID上,服務(wù)管理將使用RIL 實(shí)例的ID 來(lái)識(shí)別子系統(tǒng)ID 中DSS API的參數(shù)。
3. 3 Android 雙網(wǎng)雙待通話機(jī)制的實(shí)現(xiàn)
Android 系統(tǒng)電話服務(wù)的實(shí)現(xiàn)基礎(chǔ)是RIL.在Android 單模狀態(tài)下的RIL 同TI 等平臺(tái)類似,均使用了Google 默認(rèn)的參考接口,也就是通過(guò)打開(kāi)modem 側(cè)提供的串口或者USB 虛擬串口向modem 側(cè)發(fā)送AT 指令的方式,進(jìn)行實(shí)際的無(wú)線通信。比如,UI上層向RIL 層發(fā)送RIL_REQUEST_DIAL 請(qǐng)求,RIL 層在接收到該請(qǐng)求的時(shí)候,通過(guò)串口向modem 發(fā)送"AT***"命令,發(fā)起呼叫,當(dāng)然,最終真正實(shí)現(xiàn)通話的是modem 側(cè)的功能,此時(shí),與Android 就無(wú)關(guān)了。Android 平臺(tái)RIL 與modem 的工作原理如圖4 所示。
圖4 RIL 與modem 的工作原理
呼叫(call)構(gòu)建于電話服務(wù)的基本架構(gòu)之上。
與呼叫相關(guān)的主要用戶接口,其實(shí)就是基于ITelephony 接口實(shí)現(xiàn)Phone 應(yīng)用中的"Phone"服務(wù),通過(guò)TelephonyManager 提供訪問(wèn)接口。此服務(wù)內(nèi)部通過(guò)PhonyFactory 獲取的GSMPhone /CDMAPhone 來(lái)訪問(wèn)RIL,提供諸如撥號(hào)、接通、掛斷、保持通話等服務(wù)功能。Android 雙網(wǎng)雙待呼叫部分的結(jié)構(gòu)如圖5 所示。
圖5 android 雙網(wǎng)雙待呼叫部分結(jié)構(gòu)
Android 系統(tǒng)雙網(wǎng)雙待呼叫部分的實(shí)現(xiàn),從GSMPhone /CDMAPhone到對(duì)應(yīng)RIL 的路徑中間主要涉及幾個(gè)關(guān)鍵數(shù)據(jù)結(jié)構(gòu),即GSMCall /CDMACall、CallNotifiter、GSMConnection /CDMAConnection、CallTracker 等類。
其中GSMCall 和CDMAPhone 都繼承Call 基類,提供基本的呼叫控制結(jié)構(gòu)以及呼叫狀態(tài),如Hold、Active 等信息,每個(gè)接通的GSMCall / CDMACall 都擁有一個(gè)或多個(gè)(conference call)GSMConnection /CDMAConnection 結(jié)構(gòu),用于維護(hù)呼叫時(shí)長(zhǎng)等相關(guān)信息。CallTracker 是呼叫模塊的核心,它提供與呼叫相關(guān)的接口,如通話、掛斷等。GSMPhone /CDMAPhone 擁有CallTracker的實(shí)例,并封裝相應(yīng)的接口,這個(gè)接口通過(guò)調(diào)用GSMPhone /CDMAPhone中的CommandsInterface 實(shí)現(xiàn),即提交的RIL 封裝。
除此之外,CallTracker 還維護(hù)當(dāng)前的GSMCall 和CDMACall列表,保持對(duì)所有呼叫狀態(tài)的追蹤,提供對(duì)來(lái)去電等呼叫狀態(tài)的管理。實(shí)現(xiàn)追蹤的方法為pollCallsWhenSafe,通過(guò)CommandsInterface的getCurrentCalls 接口獲取當(dāng)前活動(dòng)的呼叫列表。這一操作的底層實(shí)現(xiàn)為AT + CLCC(不同的Modem 實(shí)現(xiàn)可能不同),這是從Modem 獲取呼叫狀態(tài)列表的主要接口?;卣{(diào)通過(guò)ENENT_ POLL _ CALLS-RESULT 完成,回調(diào)函數(shù)為handlePollCalls,這是獲取Modem 中實(shí)際呼叫信息的核心方法,也是Tracker的含義所在。handlePollCalls 完成實(shí)際的追蹤功能,根據(jù)底層上報(bào)的Outgoing、Incomming 以及Active、Hold 等狀態(tài)更新Call列表的信息,每個(gè)呼叫在其生命周期內(nèi)的狀態(tài)轉(zhuǎn)換,在Call-Tracker 中都可得到體現(xiàn),并將這些變化信息及時(shí)通知其關(guān)注者,也就是實(shí)現(xiàn)Phone 的應(yīng)用。
4 結(jié)果分析
基于Android 操作系統(tǒng)實(shí)現(xiàn)的雙網(wǎng)雙待功能模塊設(shè)計(jì),利用Android 通用的系統(tǒng)架構(gòu)和設(shè)備無(wú)關(guān)的應(yīng)用程序開(kāi)發(fā)平臺(tái),實(shí)現(xiàn)了雙網(wǎng)雙待單通系統(tǒng)電話部分的框架設(shè)計(jì)和上層Phone 應(yīng)用程序設(shè)計(jì)。改進(jìn)后的Android 系統(tǒng)平臺(tái)同時(shí)支持GSM 和CDMA兩種網(wǎng)絡(luò)同時(shí)待機(jī),這大大方便了許多擁有兩張手機(jī)卡并且不在同一制式網(wǎng)絡(luò)的用戶。圖6 為Android 系統(tǒng)平臺(tái)上GSM和CDMA 雙網(wǎng)同時(shí)待機(jī)的狀態(tài)圖。
圖6 GSM 和CDMA 雙網(wǎng)同時(shí)待機(jī)界面
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)linux相關(guān)文章:linux教程
cdma相關(guān)文章:cdma原理
評(píng)論