13.1 通话和短信
对于手机这样的Android设备而言,通话和短信自然是必不可少的功能。在Android应用开发中,时常需要调用通话和短信功能,了解它们的基础框架和设计思想将有助于更好地进行开发。
13.1.1 Android的通话和短信框架
Android的通话和短信功能(基本框架如图13-1所示),首先依托于底层硬件和配套驱动的支持[1],不同的设备,有着不同标准的基带(Baseband)硬件。而在底层硬件之上,Android抽象了一个通信接口层(Radio Interface Layer, RIL),它由一个通信守护服务(Radio Daemon)和设备厂商实现的通信类库(Vendor RIL)共同构成。在设备启动时,守护服务会加载厂商提供的通话类库,并监听特定的端口启动通话相关的Socke服务。
通信接口层像桥梁一样,连通了上层类库与底层设备。当用户需要进行拨号等通话请求时,上层类库会将请求转换成特定的指令,并通过Socket连接发送至通信守护服务,通信守护服务调用通信类库的实现,通过底层硬件设备将请求转发出去。
在Android框架层中,通话和短信功能相关的实现定义在android.telephony包中,它主要负责建立与RIL服务的连接,并将用户的请求翻译成指令和数据进行传输。不同的通话协议中的一些特殊功能都会由各自的Java包来提供,比如使用android.telephony.gsm包中的对象可以获取和GSM协议相关的参数。
而在应用层,处理通话请求的通话应用(Phone Application)是Android中最为特殊的一个应用,它和框架层密切耦合,负责所有通话请求相关的处理,系统提供的通话应用不能被其他的第三方应用所取代,以此来保证通话的可靠性。
图 13-1 Android通话和短信的基本框架
[1]关于驱动的实现,可以参见:http://source.android.com/porting/telephony.html。