新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于Android平臺的雙網雙待的設計方法

        基于Android平臺的雙網雙待的設計方法

        作者: 時間:2015-03-11 來源:網絡 收藏

          在PhoneAPP 中new 一個GSMPhone 和一個CDMAPhone,分別對應兩種framework (不同的CallTracker)和RIL (不同的RIL),實現單模向雙網雙待的改進。

        本文引用地址:http://www.104case.com/article/270832.htm

          圖中CallLiST 主要用來管理兩個電話之間的切換,以避免如掛掉某一個通話卻導致另一個的通話也結束等一系列界面顯示出錯問題。CallList 模塊管理兩個電話以及這兩個電話所有的通話,通過一個CallList 表來存儲兩個電話的所有呼叫。上層界面調用這個CallList 表來處理兩個電話的切換。在framework 中new 一個CallList 的類來存儲phone 的多個電話以便上層顯示。

          CallList 類中包含attached(),detach(),update(),clear(),get-CurrentCall(),getDefault()等方法。使得兩個Phone 的Call 得到控制。掛掉的時候就從表中刪除,來電話的時候加入表中。

          上層顯示的時候,只要調用CallList 中的最后存入Call 就不會出現界面出錯的情況。

          在包含GSM 網絡和CDMA 網絡的雙網雙待模塊中,因為有了CDMA 部分的整合不少代碼已經發生改變,原來的CallTracker只被GSM 使用,在這里改為CallTracker 和GsmCallTracker,抽象出CallTracker 基類,使其也可以被CDMA 利用; GSMCall 變成GsmCall,更加符合統一的命名規則; 另外,比如pppd 的啟動部分,也從Java 框架層放到RIL 層。

          3. 2 RIL 層的改進

          在 系統中RIL 是電話系統的本地實現,它提供了 電話服務(android. telephony)與無線電硬件之間的抽象層,主要負責AT 命令的發送和響應解析,這也是電話服務的實現基礎。另外,RIL 還負責數據的可靠傳輸。因此RIL 在Android電話部分起核心作用。本方案設計過程中主要涉及到RIL以下四個部分的修改:

          (1)由于本方案維護兩個RIL 實例,因此RIL 實例管理者(RIL instance Manager)需要各自負責與android telephony 通過socket 進行連接。每個RIL 實例針對各自的SIM 卡提供專用的通信通道來進行modem 側的通信服務。

          (2)無線電仲裁管理者(Radio Service Arbitration Manager),這是實現雙網雙待方案中新增加的模塊,主要用來為每個RIL 實例進行語音和短消息業務的仲裁,數據服務的仲裁由MODEM 來進行。

          (3)RIL 事件分配機(RIL Event Dispatcher),用于分配RIL請求及AMSS 事件到通信服務管理模塊進行的處理。

          (4)無線電服務管理者(Radio Service Manager),Android 通話應用首先需要通過子系統信息來從framework 層獲得通話服務,然后每個SIM 卡子系統將會映射到一個特定的RIL 實例ID上,服務管理將使用RIL 實例的ID 來識別子系統ID 中DSS API的參數。

          3. 3 Android 雙網雙待通話機制的實現

          Android 系統電話服務的實現基礎是RIL.在Android 單模狀態下的RIL 同TI 等平臺類似,均使用了Google 默認的參考接口,也就是通過打開modem 側提供的串口或者USB 虛擬串口向modem 側發送AT 指令的方式,進行實際的無線通信。比如,UI上層向RIL 層發送RIL_REQUEST_DIAL 請求,RIL 層在接收到該請求的時候,通過串口向modem 發送"AT***"命令,發起呼叫,當然,最終真正實現通話的是modem 側的功能,此時,與Android 就無關了。Android 平臺RIL 與modem 的工作原理如圖4 所示。



          圖4 RIL 與modem 的工作原理

          呼叫(call)構建于電話服務的基本架構之上。

          與呼叫相關的主要用戶接口,其實就是基于ITelephony 接口實現Phone 應用中的"Phone"服務,通過TelephonyManager 提供訪問接口。此服務內部通過PhonyFactory 獲取的GSMPhone /CDMAPhone 來訪問RIL,提供諸如撥號、接通、掛斷、保持通話等服務功能。Android 雙網雙待呼叫部分的結構如圖5 所示。



          圖5 android 雙網雙待呼叫部分結構

          Android 系統雙網雙待呼叫部分的實現,從GSMPhone /CDMAPhone到對應RIL 的路徑中間主要涉及幾個關鍵數據結構,即GSMCall /CDMACall、CallNotifiter、GSMConnection /CDMAConnection、CallTracker 等類。

          其中GSMCall 和CDMAPhone 都繼承Call 基類,提供基本的呼叫控制結構以及呼叫狀態,如Hold、Active 等信息,每個接通的GSMCall / CDMACall 都擁有一個或多個(conference call)GSMConnection /CDMAConnection 結構,用于維護呼叫時長等相關信息。CallTracker 是呼叫模塊的核心,它提供與呼叫相關的接口,如通話、掛斷等。GSMPhone /CDMAPhone 擁有CallTracker的實例,并封裝相應的接口,這個接口通過調用GSMPhone /CDMAPhone中的CommandsInterface 實現,即提交的RIL 封裝。

          除此之外,CallTracker 還維護當前的GSMCall 和CDMACall列表,保持對所有呼叫狀態的追蹤,提供對來去電等呼叫狀態的管理。實現追蹤的方法為pollCallsWhenSafe,通過CommandsInterface的getCurrentCalls 接口獲取當前活動的呼叫列表。這一操作的底層實現為AT + CLCC(不同的Modem 實現可能不同),這是從Modem 獲取呼叫狀態列表的主要接口?;卣{通過ENENT_ POLL _ CALLS-RESULT 完成,回調函數為handlePollCalls,這是獲取Modem 中實際呼叫信息的核心方法,也是Tracker的含義所在。handlePollCalls 完成實際的追蹤功能,根據底層上報的Outgoing、Incomming 以及Active、Hold 等狀態更新Call列表的信息,每個呼叫在其生命周期內的狀態轉換,在Call-Tracker 中都可得到體現,并將這些變化信息及時通知其關注者,也就是實現Phone 的應用。

          4 結果分析

          基于Android 操作系統實現的雙網雙待功能模塊設計,利用Android 通用的系統架構和設備無關的應用程序開發平臺,實現了雙網雙待單通系統電話部分的框架設計和上層Phone 應用程序設計。改進后的Android 系統平臺同時支持GSM 和CDMA兩種網絡同時待機,這大大方便了許多擁有兩張手機卡并且不在同一制式網絡的用戶。圖6 為Android 系統平臺上GSM和CDMA 雙網同時待機的狀態圖。



          圖6 GSM 和CDMA 雙網同時待機界面

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        linux相關文章:linux教程


        cdma相關文章:cdma原理




        關鍵詞: Android Linux

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 洮南市| 康定县| 兴宁市| 静海县| 白山市| 深圳市| 五台县| 无为县| 奉节县| 揭东县| 奇台县| 维西| 清苑县| 桐乡市| 嵊州市| 电白县| 阿克陶县| 洛南县| 呈贡县| 正安县| 台前县| 乳山市| 满洲里市| 灯塔市| 榆林市| 富民县| 宜昌市| 大洼县| 博罗县| 读书| 名山县| 抚顺市| 泸西县| 沿河| 寿光市| 全州县| 丰原市| 涿鹿县| 上犹县| 莆田市| 徐州市|