一、Android SMS架构
SMS(Short Messaging Service),短信息服务。在android源代码中已经实现了基本的短信、彩信的发送与接收以及状态报告等相关通信能力,并且将SMS、MMS功能集成在一个应用中的MMS应用。
SMS的分层结构与Android架构保持一致, 从上到下依次是:MMS应用层、Telephony Frameworks框架层、RIL层。app层如何将发送短信转换成RIL请求以及app如何接收RIL发出的新短信通知相关的代码主要集中在Java Frameworks层,因此本次学习主要关注Frameworks层。
SMS在Telephony Frameworks层主要有以下几个类:
1.SmsMessage.java(frameworks/opt/telephony/src/java/android/telephony):定义了短信在framework层的数据结构。
2.SmsMessageBase.java:容纳实际的短信数据。它有两个子类 SmsMessage.java(frameworks/opt/telephony/src/java/com/android/internal/telephony/gsm)和SmsMessage.java(frameworks/opt/telephony/src/java/com/android/internal/telephony/cdma),负责帮助SmsMessage.java(frameworks/opt/telephony/src/java/android/telephony)来处理GSM/CDMA制式下的数据解析。
3.SmsManager.java:发送短信的唯一入口。SmsManager类在Telephony Frameworks层提供短信操作的相关接口供application层调用,application层通过获取此类的对象,完成对短信的操作。该类提供了短信拆分、短信发送、将短信复制到SIM卡、从SIM卡删除短信和小区广播等接口。
4.IccSmsInterfaceManager.java:抽象类,实现了ISms.stub接口,它有两个子类:RuimSmsInterfaceManager和SimSmsInterfaceManager,分别对应USIM卡和SIM卡的操作,不同之处在于电话卡中的短信存储和读取以及小区广播的实现逻辑。
5.SMSDispatcher.java:继承Handler类,有三个子类:ImsSMSDispatcher、GsmSMSDispatcher和CdmaSMSDispatcher。与RIL.java交互,完成短信的发送和接收。
6.RIL.java:通过socket与RILC交互,完成短信发送请求与RIL请求之间的转换。