第6章 双卡加载流程学习

第6章 双卡加载流程学习

1、 PhoneFactory中的makeDefaultPhone方法。

单卡还是双卡:

图6.1

TelephonyNetWorkFactory是创建网络代理的工厂;

图6.2

初始化网络模式和RIL,支持几张卡就初始化几个RIL。

图6.3

接着就是大致把流程梳理一下、其实这些都是上几次说过的内容,这次只不过把他们合并在一起、并稍微添加了一些内容。

1、开机后PhoneFactory创建出了UiccController,该对象将作为RIL的观察者,监听卡状态变化的事件。

2、当PhoneFactory创建出GsmCdmaPhone后,GsmCdmaPhone在其初始化函数中将创建出IccCardProxy对象。

IccCardProxy对象将作为UiccController的观察者,同样监听卡状态的变化。

 

3、当用户进行插卡操作且底层检卡成功后,modem将主动向RIL发送RIL_UNSOL_SIM_STATUS_CHANGED消息。

此时,RIL将通知它的观察者UiccController。

4、UiccController收到RIL的通知后,将调用getIccCardStatus函数主动从modem获取卡相关的信息。

一旦卡信息获取成功,UiccController将调用其onGetIccCardStatusDone函数。

5、在onGetIccCardStatusDone函数中,UiccController将判断是否创建过卡对应的UiccCard对象。

如果没有创建过,UiccController将根据卡信息创建出对应的UiccCard对象;

否则,仅进行UiccCard的更新操作。

6、当UiccCard对象被创建时,在它的构造函数中将进一步创建出对应的UiccCardApplication和IccRecords。

需要注意的是,IccRecords只是一个抽象类,

UiccCardApplication将根据modem上报的卡类型,创建出实际的子类,

即SIMRecords、RuimRecords等。

当IccRecords被创建后,同样将作为RIL的观察者,监听卡状态更新消息。

7、UiccController完成上述工作后,将通知其观察者IccCardProxy对象。

此时,卡信息还未完全加载完毕。

IccCardProxy收到UiccController的通知后,注册成为IccRecords的观察者。

8、收到modem主动上报的RIL_UNSOL_SIM_REFRESH消息后,RIL将通知IccRecords对象。

IccRecords对象收到通知后,将主动与modem通信,进一步获取卡相关的信息。

当SIMRecords收到RIL的通知后,将调用handleSimRefresh函数进行处理。

handleSimRefresh函数将负责获取或更新卡对应的文件信息。

fetchSimRecords函数,将向modem发送Request,获取卡对应的信息。

9、当卡信息加载完毕后,IccRecords将调用onAllRecordsLoaded函数,通知它的观察者。

10、IccCardProxy收到通知后,将调用broadcastInternalIccStateChangedInent函数,

发送ACTION_INTERNAL_SIM_STATE_CHANGED广播。

该广播发送后,将触发数据卡的选择流程。

1、在前文中我们提到了IccCardProxy在卡信息加载完毕后,会发送ACTION_INTERNAL_SIM_STATE_CHANGED广播。

SubscriptionInfoUpdater收到广播后,就会调用handleSimLoaded函数进行处理。

2、在handleSimLoaded函数中,主要工作将由updateSubscriptionInfoByIccId函数来承担。

updateSubscriptionInfoByIccId依次调用clearSubInfo和addSubscriptionInfoRecord函数完成实际的工作。

3、clearSubInfo主要用于清除slot Id和sub Id之间的关系。

毕竟在卡槽中重新插入一张卡后,sub Id可能发生了变化,因此需要先清理过去的缓存信息。

4、addSubscriptionInfoRecord函数调用SubscriptionController的接口进行实际工作。

SubscriptionController首先将更新一些数据库字段,

设置一些卡界面显示所需要的信息,例如SIM卡在设置界面中的名称、颜色等。

然后,SubscriptionController重新建立起Slot Id和Sub Id之间的映射关系。

最后,SubscriptionController判断终端中只有一张卡时,开始设置数据、语音和短信使用的Sub Id等。

数据卡设置完毕后,SubscriptionController将发送相应的广播信息。

5、此外,SubscriptionController调用setDefaultDataSubId设置数据卡后,

还需要利用ProxyController的接口设置每个Phone对应的无线能力,即设置每张卡使用的协议栈。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值