SIM卡framwork层框架以及信息加载
UiccController
#
|
UiccCard
# #
| ------------------
UiccCardApplication CatService
# #
| |
IccRecords IccFileHandler
^ ^ ^ ^ ^ ^ ^ ^
SIMRecords---- | | | | | | ---SIMFileHandler
RuimRecords----- | | | | ----RuimFileHandler
IsimUiccRecords--- | | -----UsimFileHandler
| ------CsimFileHandler
----IsimFileHandler
1、开机后Phone额进程拉起之后,PhoneFactory创建UiccController。
2、当PhoneFactory传进GsmCdmaPhone之后,在GsmCdmaPhone的构造函数中创建UiccController的观察者,IccCardProxy将作为UiccController,同时监听卡状态的变化。
3、当底层检卡成功后即有ATR上报后,modem主动发送RIL_UNSOL_SIM_STATUS_CHANGE的消息,此事RIL将此消息通知到它的观察者UiccController。
4、UiccController收到通知之后将向磨的么进一步查询获取卡的信息。
5、信息获取成功之后,将进一步判断是否需要创建UiccCard对象,如果创建过则进行更新,否则UiccController将根据卡信息创建对应的UiccCard对象。
6、UiccCard对象创建之后,将在其构造函数中进一步创建对应的UiccCardApplication和IccRecords。
IccRecords只是一个抽象类,UiccCardApplication将更具modem上报的卡类型创建出实际的SIMRecords或RuimRecords或IsimUiccRecords等
当IccRecords被创建之后,同样作为RIL的观察者,监听Iccrefresh的消息
7、UiccController完成这些之后卡信息还未完全加载完毕,将进一步通知IccCardProxy对象,IccCardProxy收到通知之后注册成为IccRecords的观察者。
8、收到modem主动上报的RIL_UNSOL_SIM_REFRESH消息之后,RIL将通知观察者IccRecoeds。IccRecoeds收到通知后将进一步主动与modem获取卡信息 。
9、当卡信息加载完成之后,IccRecords将通知他的观察者。IccCardProxy收到通知之后将发送ACTION_INTERNAL_SIM_STATE_CHANGE广播,完了之后将触发数据卡选择流程。