SMS注册与接收短信

本文详细介绍了Android 4.2系统中短信注册与接收的流程。从PhoneApp的onCreate方法开始,通过PhoneFactory的makeDefaultPhone方法初始化RIL类,然后在RILReceiver线程中建立Socket并监听事件。当接收到RIL_UNSOL_RESPONSE_NEW_SMS(1003)事件时,短信数据会通过mGsmSmsRegistrant传递,并最终由PrivilegedSmsReceiver和SmsReceiverService进行处理。

 Android4.2

 在Android4.0中,Phone应用的Application类PhoneApp的onCreate方法中调用了

           PhoneFactory.makeDefaultPhones(this);
而在4.2中此方法被移到了PhoneGlobals中,PhoneGlobals类继承自ContextWrapper。

在PhoneFactory的makeDefaultPhone方法中初始化了RIL类的静态对象sCommandsInterface与Phone的静态对象sProxyPhone。


RIL构造时判断出手机网络良好就会启动一个线程,线程的Runnable对象是RILReceiver的对象。在run方法中构建Sockect并向下层发起连接

                    s = new LocalSocket();
                    l = new LocalSocketAddress(SOCKET_NAME_RIL,
                            LocalSocketAddress.Namespace.RESERVED);
                    s.connect(l);
如果连接不上每隔4秒重连一次。如果连接正常,则获取流,调用readRilMessage(is, buffer)方法返回除去开头4个字节外能从流中获取的字节数并把获取的字节存于8k大小限制的buffer中,如果读不到任何字节返回-1。如果返回值为-1,则跳出处理流程,重新进入for循环,否则把获取的字节存于Parcel对象中并调用processResponse(p)处理获取到的数据。
    private void
    processResponse (Parcel p) {
        int type;

        type = p.readInt();

        if (type == RESPONSE_UNSOLICITED) {
            processUnsolicited (p);
        } else if (type == RESPONSE_SOLICITED) {
            processSolicited (p);
        }

        releaseWakeLockIfDone();
    }

接下来读取4个代表类型的字节。走if流程processUnsolicited (p)。

接下来再读取4个字节的int数据代表事件类型,接收短信走RIL_UNSOL_RESPONSE_NEW_SMS(1003)流程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值