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