网络服务状态或者网络信号量是通过Modem 主动上报信息来实现的,相关类有ServiceState,GsmServiceStateTracker,GSMPhone,TelephonyRegistry等。
1.比如现在所处的网络发生变化,RILReciver 收到上报信息,处理 RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED 信息。
case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:
if (RILJ_LOGD) unsljLog(response);
mVoiceNetworkStateRegistrants
.notifyRegistrants(new AsyncResult(null, null, null));
break;
2.经分析 mVoiceNetworkStateRegistrants,是由 GsmServiceStateTracker 构造的。
public GsmServiceStateTracker(GSMPhone phone) {
...
cm.registerForVoiceNetworkStateChanged(this, EVENT_NETWORK_STATE_CHANGED, null);
...
}
3.消息交给 EVENT_NETWORK_STATE_CHANGED 处理。GsmServiceStateTracker 处理 EVENT_NETWORK_STATE_CHANGED 消息
case EVENT_NETWORK_STATE_CHANGED:
pollState(); <
1.比如现在所处的网络发生变化,RILReciver 收到上报信息,处理 RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED 信息。
case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:
if (RILJ_LOGD) unsljLog(response);
mVoiceNetworkStateRegistrants
.notifyRegistrants(new AsyncResult(null, null, null));
break;
2.经分析 mVoiceNetworkStateRegistrants,是由 GsmServiceStateTracker 构造的。
public GsmServiceStateTracker(GSMPhone phone) {
...
cm.registerForVoiceNetworkStateChanged(this, EVENT_NETWORK_STATE_CHANGED, null);
...
}
3.消息交给 EVENT_NETWORK_STATE_CHANGED 处理。GsmServiceStateTracker 处理 EVENT_NETWORK_STATE_CHANGED 消息
case EVENT_NETWORK_STATE_CHANGED:
pollState(); <