android 系统数据业务---模式切换分析(下)

本文深入探讨Android系统中数据业务的模式切换,主要涉及RIL_REQUEST_DATA_REGISTRATION_STATE和RIL_REQUEST_SETUP_DATA_CALL请求。当模式切换时,GsmServiceStateTracker监听并处理事件,调用pollState方法获取状态,通过RIL发送和接收消息,最终通过DcTracker和DataConnection进行拨号上网操作。整个过程包括与ril守护进程、NetworkAgent和netd的交互,确保数据网络的正常工作。
摘要由CSDN通过智能技术生成

5.3 RIL_REQUEST_DATA_REGISTRATION_STATE

在GsmServiceStateTracker的构造方法中,注册了一些监听事件,

mCi.registerForAvailable(this, EVENT_RADIO_AVAILABLE, null);
mCi.registerForRadioStateChanged(this, EVENT_RADIO_STATE_CHANGED, null);
mCi.registerForVoiceNetworkStateChanged(this,EVENT_NETWORK_STATE_CHANGED, null);

当ril守护进程上报一些消息时,例如UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED,就会发送

EVENT_NETWORK_STATE_CHANGED消息, GsmServiceStateTracker对该消息处理如下,

case EVENT_NETWORK_STATE_CHANGED:
     pollState();
   break;

5.3.1 消息发送

以电信卡为例,在数据网络模式切换的过程中,都会调用GsmServiceStateTracker的pollState方法获取模式切换之前的状态,

mPollingContext[0]++;
   mCi.getDataRegistrationState(
   obtainMessage(EVENT_POLL_STATE_GPRS, mPollingContext));

一会儿处理消息回调时会调用该类对EVENT_POLL_STATE_GPRS消息的处理,

RIL中的getDataRegistrationState方法如下,

@Override
public void getDataRegistrationState (Message result) {
    //消息封装
   RILRequest rr
           = RILRequest.obtain(RIL_REQUEST_DATA_REGISTRATION_STATE, result);
if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
send(rr);//通过socket向的ril发送 RIL_REQUEST_DATA_REGISTRATION_STATE
    }

3.3.2 消息回调处理

RIL中对RIL_REQUEST_DATA_REGISTRATION_STATE消息处理如下,

首先调用responseStrings方法获取返回的数据,

case RIL_REQUEST_DATA_REGISTRATION_STATE: ret =  responseStrings(p); break;

然后回调GsmServiceStateTracker到进行处理,

if (rr.mResult != null) {
     AsyncResult.forMessage(rr.mResult
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值