- UID
- 852722
|
0 引言
随着移动通信技术的快速发展以及人们对手机功能需求的不断提高,智能手机逐渐成为人们的日常消费品,智能手机的用户也与日俱增。为了方便人们的生活,追求双网双待已成为手机研发的一种普遍现象。双网双待解决了一部手机可以同时接入两个网络的难题,最大的优点是保证了GSM 与CDMA 两种网络在同一手机中同时工作,真正实现了两网自由连通。双网的连通还具有差异化优势,可以将CDMA 较高的接入速度和通信保密等强大功能体现在终端方面,使双网双待手机用户能够尽享CDMA 网络支持的丰富多彩的数据增值业务。同时GSM 与CDMA 两网的和谐整合将为手机厂商带来巨大的市场价值。
Android 作为当前众多智能手机系统平台的后起之秀,以其优势正逐渐获得广大手机开发人员和手机消费者的青睐。实现双网双待也必将成为Android 不断创新和发展的重要因素。
Android 系统由嵌入式Linux 和Java 构成,因此基于Android 系统平台的双网双待设计区别于其他手机对双网双待的实现,它充分地利用了Android 平台清晰的系统架构、简易的工作原理和已经实现的部分Phone 核心应用程序进行双网双待的功能扩展,提高了Android 平台双网双待设计的效率。
1 Android 操作系统介绍
Android 是Google 于2007 年11 月份宣布的基于Linux 2. 6. 23平台的开源手机操作系统,号称是首个为移动终端打造的真正开放和完整的移动软件。Google 重新设计了Android Java 虚拟机和系统,使得Android 的Java 应用更接近于底层系统,效率更高; 另外使用虚拟机技术使得Android 的应用在被监控的情况下运行,安全性更高。Android 包括移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍,具有平台标准化、用户可定制以及服务免费等特色,是一个对第三方软件完全开放的平台,突破了iPhone 等只能添加为数不多的固定软件的枷锁; 同时与Windows Mobile、Symbian、iPhone OS 等厂商不同,Android 操作系统免费向开发人员提供,大大节省了开发成本。
Android 平台由操作系统、中间件、用户界面和应用软件组成。Linux 内核层用来提供系统的底层服务,位于硬件和其他软件之间。Android 运行库包含一组核心库和Dalvik 虚拟机,Android 提供丰富的类库支持且大部分为开源代码,如采用嵌入式数据库SQLite.应用框架层为Android 开发人员提供了访问框架应用程序接口的全部权限,采用结构化设计简化了组件间的重用。在应用程序层,Android 本身附带了一些核心的应用程序,大大简化了Android 应用程序的开发。
因此,利用Android 平台更易于开发具有双网双待功能的智能手机系统,同时也便于在原有系统的基础上进行不断的完善和功能扩展。
2 Android 平台双网双待框架设计
Android 平台上实现的双网双待手机是将GSM 网络和CDMA网络相结合,使得一部手机可同时插入两张不同网络的号卡,并同时处于开机状态,用户无需切换网络,即可任意拨打、接听和收发短信,且这些手机均可支持中国电信自有的增值业务,使商务人士尽享移动办公的自由以及休息娱乐的乐趣。此外,用户还可预设接听和拨打电话的顺序,使用起来非常方便。
基于Android 系统平台的双网双待的设计,充分结合了Android2. 1 版本之后在framework 层上已经实现的双卡处理机制,设计方案主要侧重于RIL 及ARM(modem)侧的实现机制。通过在RIL 上依样建立一套新的处理机制,将双卡分别进行处理。
比如,打电话的时候,发送哪套请求就先选择向哪套机制发送请求,然后还在这套机制中等待消息的返回。Android 平台双网双待框架如图1 所示。
图1 Android 平台双网双待框架
图1 中GSM 网络和CDMA 网络分别拥有一套独立的RIL处理机制,从而可以根据上层不同的Phone 服务执行framework层以及RIL 层的相应处理,真正实现双网的协同工作,达到同一手机中双网双卡之间互不干扰的效果。
3 Android 平台双网双待软件设计
Android 平台双网双待功能设计主要涉及到Android 软件平台的四大功能模块,分别是Linux 内核层、本机库/运行时、应用程序框架层以及应用程序层。其中在应用程序层利用Android的各种组件API 实现PhoneApp 并在Linux 内核层提供相应的底层驱动。Android 系统架构如图2 所示。
图2 Android 系统架构
(1)Linux 内核。
Android 系统平台是基于优化的Linux 内核来开发的,主要添加了一个名为Goldfish 的虚拟CPU 以及Android 运行所需的特定驱动代码。该层用来提供系统的底层服务,提供诸如内存管理、进程管理、设备驱动、安全管理、电源管理等驱动模块,作为一个虚拟的中间层,该层位于硬件与其他软件层之间,采用YAFFS2 文件系统,同时也是手机软硬件的连接层。在系统开发中,也需要针对自身的硬件模块添加对应的驱动,如Phone 驱动、GPRS 驱动、GPS 驱动、液晶和触摸板驱动等。
(2)本机库/Android 运行时。
这些共享库都是利用C 和C + + 语言编写的,且针对电话使用的特定的硬件架构进行了编译,并已由手机制造商预先安装到手机上。本机库主要包含: 标准C 函数库、媒体功能库、浏览器引擎、2D 和3D 图形库及SQLite 引擎等。开发者利用这些功能可以方便地开发出人机界面友好的应用程序接口,极大地缩短了开发过程。
Android 运行时包含一组Java 内核库和Dalvik 虚拟机,它们有效地优化了Java 程序的运行过程。
(3)应用程序框架层。
Android 应用程序开发是基于框架和组件的,该层提供了在创建应用程序时需要使用的各种高级构建块,因此在该层中,开发人员拥有访问框架API 的全部权限,在开发应用程序时调用Android 本身自带的许多组件,也可以开发新的组件,并将该组件放入应用程序框架中,以供自己和其它应用程序调用,这样的模块大大提高了应用程序的开发效率。
(4)应用程序层。
Android 本身包含一些由Java 开发的核心应用程序,如桌面、短信收发程序、日历、电话通讯录、浏览器、E-mail 客户端等,开发者还可以在此基础上开发出更多具有特色的Android 应用程序,如特效相机、播放器、充电相框等。
3. 1 Android 双网双待实现方案
在GSM 单模状态下通过添加一套支持CDMA 的无线接口层RIL 来实现双网双待机制的方案如图3 所示。
图3 Android 双网双待电话部分结构
在PhoneAPP 中new 一个GSMPhone 和一个CDMAPhone,分别对应两种framework (不同的CallTracker)和RIL (不同的RIL),实现单模向双网双待的改进。
图中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 Android RIL 层的改进
在Android 系统中RIL 是电话系统的本地实现,它提供了Android 电话服务(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 双网同时待机界面
5 结语
利用Android 原有系统架构和本身包含一些Java 核心应用程序,通过添加一套新的支持CDMA 的RIL 来实现基于Android平台的双网双待设计,使得一部手机同时维护两套独立的RIL,既支持GSM 又支持CDMA,分别对双SIM 卡进行各自独立的处理,极大地方便了广大Android 手机用户。Android 作为目前被给予厚望的智能手机操作系统,实现双网双待必将为其赢得更广阔的发展空间以及更多的拥护者,也将为未来的发展奠定坚实的基础。尽管本方案的部分设计还不完善,许多细节的实现还有待解决。但随着Google 对Android 版本的不断升级以及Android 应用的不断丰富,基于Android 平台的双网双待设计将会不断地完善与发展。 |
|