Android短信接收过程源码分析(原)

本文深入探讨了RILJ如何处理接收到的短信并将其转换为Broadcast发送到Android系统的过程,涉及GsmSMSDispatcher的注册监听、RILJ的通知机制以及SMSDispatcher向系统广播的流程。
摘要由CSDN通过智能技术生成

        本文主要讨论RILJ接收到一条普通短消息时是如何把它转换成Broadcast发送到系统中的


一、GsmSMSDispatcher注册监听过程

        在《 Framework层中的RIL》一文中我们介绍过,Framework与应用层中的Phone对象其实就是用GSMPhone对象生成的PhoneProxy对象(CDMA制式不谈)。 可以简单的理解为Phone就是GSMPhone对象
        而GSMPhone又是Framework中与RIL层沟通的对象,因此我们从GSMPhone开始入手分析。
@GSMPhone.java
public GSMPhone (Context context, CommandsInterface ci, PhoneNotifier notifier, boolean unitTestMode) {
    //调用父类PhoneBase的构造函数,在内部实现一下赋值:phone.mCM=ci=RILJ
    super(notifier, context, ci, unitTestMode);

    //初始化GsmSMSDispatcher,用于派发短消息
    mSMS = new GsmSMSDispatcher(this, mSmsStorageMonitor, mSmsUsageMonitor);
}
        上面看到,在GSMPhone的构造函数中,创建了GsmSMSDispatcher对象,这个对象是干什么用的呢?
        其实在对SMS的处理上,不同的制式也有不同的处理方法, 与Phone对象类似,SMS同样抽象出来了一个SMSDispatcher类,他把各个制式对于SMS的处理中相同的部分抽象出来,而对于制式中不同的部分派生出了GsmSMSDispatcher子类和CdmaSMSDispatcher子类
        而我们主要关注GsmSMSDispatcher子类:
@GsmSMSDispatcher.java
public GsmSMSDispatcher(PhoneBase phone, SmsStorageMonitor storageMonitor, SmsUsageMonitor usageMonitor) {
    super(phone, storageMonitor, usageMonitor);
    mDataDownloadHandler = new UsimDataDownloadHandler(mCm);
    //监测3个与SMS有关的状态
    mCm.setOnNewGsmSms(this, EVENT_NEW_SMS, null);
    mCm.setOnSmsStatus(this, EVENT_NEW_SMS_STATUS_REPORT, null);
    mCm.setOnNewGsmBroadcastSms(this, EVENT_NEW_BROADCAST_SMS, null);
}
        从上面可以看到,GsmSMSDispatcher的作用主要检测三种短消息事件。而上面的mCm是在其父类SMSDispatcher中进行初始化的:

                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值