5 setPreferredNetworkType详解
5.1 RIL处理
RIL.java中setPreferredNetworkType方法如下,
@Override
public void setPreferredNetworkType(int networkType , Message response) {
RILRequest rr = RILRequest.obtain(
RILConstants.RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE, response);
rr.mParcel.writeInt(1);
rr.mParcel.writeInt(networkType);
mPreferredNetworkType = networkType;
if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
+ " : " + networkType);
send(rr);
}
发送的是RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE类型的消息。
每一个通过RIL发送的消息都会有对应的返回消息,RIL中的processSolicited方法会对
RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE类型的消息处理如下,
A,首先获取ril库上报的数据,
case RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE: ret = responseVoid(p); break;
responseVoid方法返回的是null,
B,然后进行回调,
if (rr.mResult != null) {
AsyncResult.forMessage(rr.mResult, ret, null);
rr.mResult.sendToTarget();
}
AsyncResult 回调就一个原则,谁发起谁处理。
回看MobileNetworkSettings的onPreferenceChange方法,
mPhone.setPreferredNetworkType(modemNetworkMode, mHandler
.obtainMessage(MyHandler.MESSAGE_SET_PREFERRED_NETWORK_TYPE));
调用PhoneProxy的setPreferredNetworkType携带的是MESSAGE_SET