"这篇文档详细介绍了Android系统中发送短信的过程,包括应用层、框架层以及通过CDMA和IMS网络发送短信的流程。"
在Android系统中,发送短信涉及到多个层次的交互,首先从用户界面开始,然后深入到操作系统内核层面。以下是整个短信发送过程的详细步骤:
1. 应用层
- 用户在`ConversationListActivity`中选择一个联系人或创建新会话,进入`ConversationActivity`。
- 在`ConversationActivity`中,`ConversationFragment`负责展示对话内容,用户通过`ComposeMessageView`输入短信内容。
- 当用户点击发送按钮,`ConversationFragment`执行一系列动作,如`InsertNewMessageAction`(插入新消息)、`ProcessPendingMessagesAction`(处理待发送的消息)和`SendMessageAction`(发送消息)。
- `MmsUtils`和`SmsSender`类分别处理与多媒体消息(MMS)和简单文本消息(SMS)相关的逻辑。
2. 框架层
- 在Android框架层,`SmsManager`是应用程序用来发送短信的接口。它通过`ISms`接口与底层服务进行通信,`ISms`的实现类是`UiccSmsController`。
- `IccSmsInterfaceManager`管理SIM卡上的短信存储,并处理短信的发送和接收。
- `SmsDispatchersController`负责调度短信的发送,根据网络类型(如GSM、CDMA或IMS)选择合适的`SMSDispatcher`子类。
3. SmsoverCdma
- 对于CDMA网络,`CdmaSMSDispatcher`类负责短信的发送。由于它没有重写`SMSDispatcher`的`sendText`方法,因此调用的是父类的实现。
- `SMSDispatcher`是所有网络类型的短信调度器的基类,处理不同网络类型的短信发送逻辑。
- `RIL`(Radio Interface Layer)是操作系统与无线射频硬件之间的接口,处理底层通信。
4. SmsoverIMS
- 在IMS网络上,`ImsSmsDispatcher`类处理短信发送。同样,它依赖于`SMSDispatcher`的`sendText`方法。
- `ImsManager`和`MmTelFeatureConnection`、`MmTelFeature`是与IMS服务交互的关键组件,它们负责建立与IMS网络的连接并发送短信。
- `IImsMmTelFeature.Stub`是远程接口的代理,用于通过 Binder 机制与`MmTelFeature`类的`mImsMMTelBinder`成员变量通信,实现跨进程的IMS功能调用。
整个发送短信的过程涉及了用户界面的交互、Android框架的调用、网络适配器的选择以及底层硬件接口的通信,是一个复杂而有序的系统协同工作过程。理解这个过程对于开发Android短信相关功能或者进行系统级调试非常重要。