6,SIM卡
SIM卡主要的内容包括,SIM卡信息的状态的变化。其中,状态的变化主要是从Modem到RIL守护进程最后上报给phone进程的RIL.java的。
6.1 状态变化
SIM卡状态的变化主要通过UiccController,这个类在phone进程初始化的时候会进行初始化。
UiccController的构造方法如下,
mContext = c; //进程上下文
mCis = ci;// RIL对象
for (int i = 0; i < mCis.length; i++) {
Integer index = new Integer(i);
mCis[i].registerForIccStatusChanged(this, EVENT_ICC_STATUS_CHANGED, index);
mCis[i].registerForAvailable(this, EVENT_ICC_STATUS_CHANGED, index);
mCis[i].registerForNotAvailable(this, EVENT_RADIO_UNAVAILABLE, index);
mCis[i].registerForIccRefresh(this, EVENT_SIM_REFRESH, index);
}
当插卡开机或热插拔时,当 Modem 检卡成功后会主动上报 RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED消息,通过 RIL 通知上层监听者 UiccController,后者在收到通知后会调用 getIccCardStatus 通过 RIL 向 Modem 主动获取SIM卡相关信息,在得到 RIL_REQUEST_GET_SIM_STATUS 返回后,调用 onGetIccCardStatusDone 进行后续处理。详细的调用流程图如下,
RIL中的processUnsolicited方法对RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED消息处理如下,
1,首先调用
case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED: ret = responseVoid(p); break;
responseVoid方法直接返回null。
2,然后对该消息进行处理,
case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED:
if (RILJ_LOGD) unsljLog(response); //输出log
if (mIccStatusChangedRegistrants != null) {