SIM卡 --- 状态变化

本文详细探讨了Android系统中SIM卡状态变化的过程,从Modem到RIL再到phone进程的交互,涉及UiccController、RIL请求及响应、IccCardStatus和UiccCard的更新。在SIM卡状态改变时,系统如何通过注册监听和消息处理来同步SIM信息。
摘要由CSDN通过智能技术生成

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) {
       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值