短息接收--android短彩信的接收流程深入分析(framework)

本文深入分析了Android短彩信接收的流程,从RIL Java层的监听与数据处理,到Framework层的SMSDispatcher如何处理短信,再到彩信的接收。关键步骤包括RILReceiver内部类的处理、SMSDispatcher的message调度以及最终到达应用层的处理。文章还提到了不同Android版本的差异,并表示将进一步研究底层通信机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

短彩信的接收流程

涉及的文件

com.android.internal.telephony/Ril.java
com.android.internal.telephony/SMSDispatcher
com.android.internal.telephony/CommandsInterface
com.android.internal.telephony/GsmSMSDispatcher
com.android.internal.telephony/CdmanSMSDispatcher
com.android.internal.telephony/ImsSMSDispatcher
hardware/ril/libril/ril.cpp
com.android.mms.transaction/PrivilegedSmsReceiver

流程分析

时序图

 

android ril java层接收短息的流程

1)监听底层上报的数据

在Ril.java中定义了一个receive的框架:当接收到短信时,底层首先通过rild将接收到的短信通过socket传送给Ril.java,那大家都知道这个短信接收是一个不定时的,所以就必须有一个监听器一直监视这个socket一旦有短信就触发其相应的操作。那Ril.java是否有定义这样的一个监听器或者类似的功能了?(补充:这涉及一个Modem端与rild的通信,rild是一个守护进程,是整个android ril层的入口点,这部分笔者不是很清楚,推荐网页http://blog.163.com/yan_zhennan@126/blog/static/10934475020122275412446/

通过查看代码我们可以发现RILReceiver的内部类:

class RILReceiver implements Runnable {
        byte[] buffer;
        RILReceiver() {
            buffer = new byte[RIL_MAX_COMMAND_BYTES];
        }
        public void
        run() {
            int retryCount = 0;
            String rilSocket = "rild";

            try {for (;;) {
                LocalSocket s = null;
                LocalSocketAddress l;

                boolean multiRild = SystemProperties.getBoolean("ro.multi.rild", false);

                if (mInstanceId == 0 || multiRild == false) {
                    rilSocket = SOCKET_NAME_RIL;
                } else {
                    rilSocket = SOCKET_NAME_RIL1;
                }
                try {
          
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值