基于A(yíng)ndroid平臺的雙網(wǎng)雙待的設計方法
3. 3 Android 雙網(wǎng)雙待通話(huà)機制的實(shí)現
本文引用地址:http://dyxdggzs.com/article/139563.htmAndroid 系統電話(huà)服務(wù)的實(shí)現基礎是RIL.在Android 單模狀態(tài)下的RIL 同TI 等平臺類(lèi)似,均使用了Google 默認的參考接口,也就是通過(guò)打開(kāi)modem 側提供的串口或者USB 虛擬串口向modem 側發(fā)送AT 指令的方式,進(jìn)行實(shí)際的無(wú)線(xiàn)通信。比如,UI上層向RIL 層發(fā)送RIL_REQUEST_DIAL 請求,RIL 層在接收到該請求的時(shí)候,通過(guò)串口向modem 發(fā)送“AT***”命令,發(fā)起呼叫,當然,最終真正實(shí)現通話(huà)的是modem 側的功能,此時(shí),與Android 就無(wú)關(guān)了。Android 平臺RIL 與modem 的工作原理如圖4 所示。

圖4 RIL 與modem 的工作原理
呼叫(call)構建于電話(huà)服務(wù)的基本架構之上。
與呼叫相關(guān)的主要用戶(hù)接口,其實(shí)就是基于ITelephony 接口實(shí)現Phone 應用中的“Phone”服務(wù),通過(guò)TelephonyManager 提供訪(fǎng)問(wèn)接口。此服務(wù)內部通過(guò)PhonyFactory 獲取的GSMPhone /CDMAPhone 來(lái)訪(fǎng)問(wèn)RIL,提供諸如撥號、接通、掛斷、保持通話(huà)等服務(wù)功能。Android 雙網(wǎng)雙待呼叫部分的結構如圖5 所示。

圖5 android 雙網(wǎng)雙待呼叫部分結構
Android 系統雙網(wǎng)雙待呼叫部分的實(shí)現,從GSMPhone /CDMAPhone到對應RIL 的路徑中間主要涉及幾個(gè)關(guān)鍵數據結構,即GSMCall /CDMACall、CallNotifiter、GSMConnection /CDMAConnection、CallTracker 等類(lèi)。
其中GSMCall 和CDMAPhone 都繼承Call 基類(lèi),提供基本的呼叫控制結構以及呼叫狀態(tài),如Hold、Active 等信息,每個(gè)接通的GSMCall / CDMACall 都擁有一個(gè)或多個(gè)(conference call)GSMConnection /CDMAConnection 結構,用于維護呼叫時(shí)長(cháng)等相關(guān)信息。CallTracker 是呼叫模塊的核心,它提供與呼叫相關(guān)的接口,如通話(huà)、掛斷等。GSMPhone /CDMAPhone 擁有CallTracker的實(shí)例,并封裝相應的接口,這個(gè)接口通過(guò)調用GSMPhone /CDMAPhone中的CommandsInterface 實(shí)現,即提交的RIL 封裝。
除此之外,CallTracker 還維護當前的GSMCall 和CDMACall列表,保持對所有呼叫狀態(tài)的追蹤,提供對來(lái)去電等呼叫狀態(tài)的管理。實(shí)現追蹤的方法為pollCallsWhenSafe,通過(guò)CommandsInterface的getCurrentCalls 接口獲取當前活動(dòng)的呼叫列表。這一操作的底層實(shí)現為AT + CLCC(不同的Modem 實(shí)現可能不同),這是從Modem 獲取呼叫狀態(tài)列表的主要接口?;卣{通過(guò)ENENT_ POLL _ CALLS-RESULT 完成,回調函數為handlePollCalls,這是獲取Modem 中實(shí)際呼叫信息的核心方法,也是Tracker的含義所在。handlePollCalls 完成實(shí)際的追蹤功能,根據底層上報的Outgoing、Incomming 以及Active、Hold 等狀態(tài)更新Call列表的信息,每個(gè)呼叫在其生命周期內的狀態(tài)轉換,在Call-Tracker 中都可得到體現,并將這些變化信息及時(shí)通知其關(guān)注者,也就是實(shí)現Phone 的應用。
評論