Android平臺的手機雙網雙待的設計
0 引言
本文引用地址:http://butianyuan.cn/article/260166.htm隨著移動通信技術的快速發(fā)展以及人們對手機功能需求的不斷提高,智能手機逐漸成為人們的日常消費品,智能手機的用戶也與日俱增。為了方便人們的生活,追求雙網雙待已成為手機研發(fā)的一種普遍現(xiàn)象。雙網雙待解決了一部手機可以同時接入兩個網絡的難題,最大的優(yōu)點是保證了GSM 與CDMA 兩種網絡在同一手機中同時工作,真正實現(xiàn)了兩網自由連通。雙網的連通還具有差異化優(yōu)勢,可以將CDMA 較高的接入速度和通信保密等強大功能體現(xiàn)在終端方面,使雙網雙待手機用戶能夠盡享CDMA 網絡支持的豐富多彩的數(shù)據增值業(yè)務。同時GSM 與CDMA 兩網的和諧整合將為手機廠商帶來巨大的市場價值。
Android 作為當前眾多智能手機系統(tǒng)平臺的后起之秀,以其優(yōu)勢正逐漸獲得廣大手機開發(fā)人員和手機消費者的青睞。實現(xiàn)雙網雙待也必將成為Android 不斷創(chuàng)新和發(fā)展的重要因素。
Android 系統(tǒng)由嵌入式Linux 和Java 構成,因此基于Android 系統(tǒng)平臺的雙網雙待設計區(qū)別于其他手機對雙網雙待的實現(xiàn),它充分地利用了Android 平臺清晰的系統(tǒng)架構、簡易的工作原理和已經實現(xiàn)的部分Phone 核心應用程序進行雙網雙待的功能擴展,提高了Android 平臺雙網雙待設計的效率。
1 Android 操作系統(tǒng)介紹
Android 是Google 于2007 年11 月份宣布的基于Linux 2. 6. 23平臺的開源手機操作系統(tǒng),號稱是首個為移動終端打造的真正開放和完整的移動軟件。Google 重新設計了Android Java 虛擬機和系統(tǒng),使得Android 的Java 應用更接近于底層系統(tǒng),效率更高; 另外使用虛擬機技術使得Android 的應用在被監(jiān)控的情況下運行,安全性更高。Android 包括移動電話工作所需的全部軟件,而且不存在任何以往阻礙移動產業(yè)創(chuàng)新的專有權障礙,具有平臺標準化、用戶可定制以及服務免費等特色,是一個對第三方軟件完全開放的平臺,突破了iPhone 等只能添加為數(shù)不多的固定軟件的枷鎖; 同時與Windows Mobile、Symbian、iPhone OS 等廠商不同,Android 操作系統(tǒng)免費向開發(fā)人員提供,大大節(jié)省了開發(fā)成本。
Android 平臺由操作系統(tǒng)、中間件、用戶界面和應用軟件組成。Linux 內核層用來提供系統(tǒng)的底層服務,位于硬件和其他軟件之間。Android 運行庫包含一組核心庫和Dalvik 虛擬機,Android 提供豐富的類庫支持且大部分為開源代碼,如采用嵌入式數(shù)據庫SQLite.應用框架層為Android 開發(fā)人員提供了訪問框架應用程序接口的全部權限,采用結構化設計簡化了組件間的重用。在應用程序層,Android 本身附帶了一些核心的應用程序,大大簡化了Android 應用程序的開發(fā)。
因此,利用Android 平臺更易于開發(fā)具有雙網雙待功能的智能手機系統(tǒng),同時也便于在原有系統(tǒng)的基礎上進行不斷的完善和功能擴展。
2 Android 平臺雙網雙待框架設計
Android 平臺上實現(xiàn)的雙網雙待手機是將GSM 網絡和CDMA網絡相結合,使得一部手機可同時插入兩張不同網絡的號卡,并同時處于開機狀態(tài),用戶無需切換網絡,即可任意撥打、接聽和收發(fā)短信,且這些手機均可支持中國電信自有的增值業(yè)務,使商務人士盡享移動辦公的自由以及休息娛樂的樂趣。此外,用戶還可預設接聽和撥打電話的順序,使用起來非常方便。
基于Android 系統(tǒng)平臺的雙網雙待的設計,充分結合了Android2. 1 版本之后在framework 層上已經實現(xiàn)的雙卡處理機制,設計方案主要側重于RIL 及ARM( modem) 側的實現(xiàn)機制。通過在RIL 上依樣建立一套新的處理機制,將雙卡分別進行處理。
比如,打電話的時候,發(fā)送哪套請求就先選擇向哪套機制發(fā)送請求,然后還在這套機制中等待消息的返回。Android 平臺雙網雙待框架如圖1 所示。
圖1 Android 平臺雙網雙待框架
圖1 中GSM 網絡和CDMA 網絡分別擁有一套獨立的RIL處理機制,從而可以根據上層不同的Phone 服務執(zhí)行framework層以及RIL 層的相應處理,真正實現(xiàn)雙網的協(xié)同工作,達到同一手機中雙網雙卡之間互不干擾的效果。
3 Android 平臺雙網雙待軟件設計
Android 平臺雙網雙待功能設計主要涉及到Android 軟件平臺的四大功能模塊,分別是Linux 內核層、本機庫/運行時、應用程序框架層以及應用程序層。其中在應用程序層利用Android的各種組件API 實現(xiàn)PhoneApp 并在Linux 內核層提供相應的底層驅動。Android 系統(tǒng)架構如圖2 所示。
圖2 Android 系統(tǒng)架構
1) Linux 內核。
Android 系統(tǒng)平臺是基于優(yōu)化的Linux 內核來開發(fā)的,主要添加了一個名為Goldfish 的虛擬CPU 以及Android 運行所需的特定驅動代碼。該層用來提供系統(tǒng)的底層服務,提供諸如內存管理、進程管理、設備驅動、安全管理、電源管理等驅動模塊,作為一個虛擬的中間層,該層位于硬件與其他軟件層之間,采用YAFFS2 文件系統(tǒng),同時也是手機軟硬件的連接層。在系統(tǒng)開發(fā)中,也需要針對自身的硬件模塊添加對應的驅動,如Phone 驅動、GPRS 驅動、GPS 驅動、液晶和觸摸板驅動等。
?。?) 本機庫/Android 運行時。
這些共享庫都是利用C 和C + + 語言編寫的,且針對電話使用的特定的硬件架構進行了編譯,并已由手機制造商預先安裝到手機上。本機庫主要包含: 標準C 函數(shù)庫、媒體功能庫、瀏覽器引擎、2D 和3D 圖形庫及SQLite 引擎等。開發(fā)者利用這些功能可以方便地開發(fā)出人機界面友好的應用程序接口,極大地縮短了開發(fā)過程。
Android 運行時包含一組Java 內核庫和Dalvik 虛擬機,它們有效地優(yōu)化了Java 程序的運行過程。
?。?) 應用程序框架層。
Android 應用程序開發(fā)是基于框架和組件的,該層提供了在創(chuàng)建應用程序時需要使用的各種高級構建塊,因此在該層中,開發(fā)人員擁有訪問框架API 的全部權限,在開發(fā)應用程序時調用Android 本身自帶的許多組件,也可以開發(fā)新的組件,并將該組件放入應用程序框架中,以供自己和其它應用程序調用,這樣的模塊大大提高了應用程序的開發(fā)效率。
?。?) 應用程序層。
Android 本身包含一些由Java 開發(fā)的核心應用程序,如桌面、短信收發(fā)程序、日歷、電話通訊錄、瀏覽器、E-mail 客戶端等,開發(fā)者還可以在此基礎上開發(fā)出更多具有特色的Android 應用程序,如特效相機、播放器、充電相框等。
3. 1 Android 雙網雙待實現(xiàn)方案
在GSM 單模狀態(tài)下通過添加一套支持CDMA 的無線接口層RIL 來實現(xiàn)雙網雙待機制的方案如圖3 所示。
圖3 Android 雙網雙待電話部分結構
在PhoneAPP 中new 一個GSMPhone 和一個CDMAPhone,分別對應兩種framework ( 不同的CallTracker) 和RIL ( 不同的RIL) ,實現(xiàn)單模向雙網雙待的改進。
圖中CallLiST 主要用來管理兩個電話之間的切換,以避免如掛掉某一個通話卻導致另一個的通話也結束等一系列界面顯示出錯問題。CallList 模塊管理兩個電話以及這兩個電話所有的通話,通過一個CallList 表來存儲兩個電話的所有呼叫。上層界面調用這個CallList 表來處理兩個電話的切換。在framework 中new 一個CallList 的類來存儲phone 的多個電話以便上層顯示。
CallList 類中包含attached( ) ,detach( ) ,update( ) ,clear( ) ,get-CurrentCall( ) ,getDefault( ) 等方法。使得兩個Phone 的Call 得到控制。掛掉的時候就從表中刪除,來電話的時候加入表中。
上層顯示的時候,只要調用CallList 中的最后存入Call 就不會出現(xiàn)界面出錯的情況。
在包含GSM 網絡和CDMA 網絡的雙網雙待模塊中,因為有了CDMA 部分的整合不少代碼已經發(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)基礎。另外,RIL 還負責數(shù)據的可靠傳輸。因此RIL 在Android電話部分起核心作用。本方案設計過程中主要涉及到RIL以下四個部分的修改:
?。?) 由于本方案維護兩個RIL 實例,因此RIL 實例管理者( RIL instance Manager) 需要各自負責與android telephony 通過socket 進行連接。每個RIL 實例針對各自的SIM 卡提供專用的通信通道來進行modem 側的通信服務。
(2) 無線電仲裁管理者( Radio Service Arbitration Manager),這是實現(xiàn)雙網雙待方案中新增加的模塊,主要用來為每個RIL 實例進行語音和短消息業(yè)務的仲裁,數(shù)據服務的仲裁由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ù)。
3. 3 Android 雙網雙待通話機制的實現(xiàn)
Android 系統(tǒng)電話服務的實現(xiàn)基礎是RIL.在Android 單模狀態(tài)下的RIL 同TI 等平臺類似,均使用了Google 默認的參考接口,也就是通過打開modem 側提供的串口或者USB 虛擬串口向modem 側發(fā)送AT 指令的方式,進行實際的無線通信。比如,UI上層向RIL 層發(fā)送RIL_REQUEST_DIAL 請求,RIL 層在接收到該請求的時候,通過串口向modem 發(fā)送“AT***”命令,發(fā)起呼叫,當然,最終真正實現(xiàn)通話的是modem 側的功能,此時,與Android 就無關了。Android 平臺RIL 與modem 的工作原理如圖4 所示。
圖4 RIL 與modem 的工作原理
呼叫( call) 構建于電話服務的基本架構之上。
與呼叫相關的主要用戶接口,其實就是基于ITelephony 接口實現(xiàn)Phone 應用中的“Phone”服務,通過TelephonyManager 提供訪問接口。此服務內部通過PhonyFactory 獲取的GSMPhone /CDMAPhone 來訪問RIL,提供諸如撥號、接通、掛斷、保持通話等服務功能。Android 雙網雙待呼叫部分的結構如圖5 所示。
圖5 android 雙網雙待呼叫部分結構
Android 系統(tǒng)雙網雙待呼叫部分的實現(xiàn),從GSMPhone /CDMAPhone到對應RIL 的路徑中間主要涉及幾個關鍵數(shù)據結構,即GSMCall /CDMACall、CallNotifiter、GSMConnection /CDMAConnection、CallTracker 等類。
其中GSMCall 和CDMAPhone 都繼承Call 基類,提供基本的呼叫控制結構以及呼叫狀態(tài),如Hold、Active 等信息,每個接通的GSMCall / CDMACall 都擁有一個或多個( conference call)GSMConnection /CDMAConnection 結構,用于維護呼叫時長等相關信息。CallTracker 是呼叫模塊的核心,它提供與呼叫相關的接口,如通話、掛斷等。GSMPhone /CDMAPhone 擁有CallTracker的實例,并封裝相應的接口,這個接口通過調用GSMPhone /CDMAPhone中的CommandsInterface 實現(xiàn),即提交的RIL 封裝。
除此之外,CallTracker 還維護當前的GSMCall 和CDMACall列表,保持對所有呼叫狀態(tài)的追蹤,提供對來去電等呼叫狀態(tài)的管理。實現(xiàn)追蹤的方法為pollCallsWhenSafe,通過CommandsInterface的getCurrentCalls 接口獲取當前活動的呼叫列表。這一操作的底層實現(xiàn)為AT + CLCC( 不同的Modem 實現(xiàn)可能不同) ,這是從Modem 獲取呼叫狀態(tài)列表的主要接口。回調通過ENENT_ POLL _ CALLS-RESULT 完成,回調函數(shù)為handlePollCalls,這是獲取Modem 中實際呼叫信息的核心方法,也是Tracker的含義所在。handlePollCalls 完成實際的追蹤功能,根據底層上報的Outgoing、Incomming 以及Active、Hold 等狀態(tài)更新Call列表的信息,每個呼叫在其生命周期內的狀態(tài)轉換,在Call-Tracker 中都可得到體現(xiàn),并將這些變化信息及時通知其關注者,也就是實現(xiàn)Phone 的應用。
4 結果分析
基于Android 操作系統(tǒng)實現(xiàn)的雙網雙待功能模塊設計,利用Android 通用的系統(tǒng)架構和設備無關的應用程序開發(fā)平臺,實現(xiàn)了雙網雙待單通系統(tǒng)電話部分的框架設計和上層Phone 應用程序設計。改進后的Android 系統(tǒng)平臺同時支持GSM 和CDMA兩種網絡同時待機,這大大方便了許多擁有兩張手機卡并且不在同一制式網絡的用戶。圖6 為Android 系統(tǒng)平臺上GSM和CDMA 雙網同時待機的狀態(tài)圖。
圖6 GSM 和CDMA 雙網同時待機界面
5 結語
利用Android 原有系統(tǒng)架構和本身包含一些Java 核心應用程序,通過添加一套新的支持CDMA 的RIL 來實現(xiàn)基于Android平臺的雙網雙待設計,使得一部手機同時維護兩套獨立的RIL,既支持GSM 又支持CDMA,分別對雙SIM 卡進行各自獨立的處理,極大地方便了廣大Android 手機用戶。Android 作為目前被給予厚望的智能手機操作系統(tǒng),實現(xiàn)雙網雙待必將為其贏得更廣闊的發(fā)展空間以及更多的擁護者,也將為未來的發(fā)展奠定堅實的基礎。盡管本方案的部分設計還不完善,許多細節(jié)的實現(xiàn)還有待解決。但隨著Google 對Android 版本的不斷升級以及Android 應用的不斷豐富,基于Android 平臺的雙網雙待設計將會不斷地完善與發(fā)展。
評論