SubscriptionInfo框架解析

本章讨论所涉及到的类
[java] view plain copy
  1. vendor\qcom\proprietary\telephony-fwk\opt\telephony\src\java\com\qti\internal\telephony\UiccCardProvisioner.java  
  2. vendor\qcom\proprietary\telephony-fwk\opt\telephony\src\java\com\qti\internal\telephony\QtiSubscriptionInfoUpdater.java  
  3. frameworks\opt\telephony\src\java\com\android\internal\telephony\SubscriptionInfoUpdater.java  
  4. frameworks\opt\telephony\src\java\com\android\internal\telephony\SubscriptionController.java  
  5. frameworks\base\telephony\src\java\android\telephony\SubscriptionManager.java  
  6. frameworks\base\telephony\src\java\android\telephony\SubscriptionInfo.java  

UiccCardProvisioner是高通在M上新增的激活卡的类,
SubscriptionManager将SubscriptionController的接口暴露给其他模块,来获取当前插入卡的信息。通过Parcel接口类SubscriptionInfo传递给其他进程。

在卡插入后,框架会在数据库中保存卡的信息,包括卡的subid,iccid、slotid、carriername、mcc、mnc等。
在框架中通过 SubscriptionInfoUpdater对卡进行一个更新的操作,对外提供subscriptionManager的接口对外访问,实际上是通过Binder调用SubscriptionController里面的方法。
SubscriptionInfo框架解析_第1张图片
SubscriptionInfo框架解析_第2张图片
1 框架内部通过subscriptionInfoUpdater更新卡的信息,首先卡信息只负责插入和更新,不会删除原来的记录,因此一张卡插入后它的subid是不会变的,其实是和对应的iccid一一对应的。 在框架内部是通过subid来区分不同的卡。

subscriptionInfo更新有四种情况:
1 UiccCardProvisioner.queryUiccProvisionInfo 负责正常情况下添加
2 sim absent 负责拔卡情况下删除,只是将simSlotIndex设置为-1。
3 sim locked 负责pin码情况下添加
4 sim loaded

1  添加流程:
添加卡的信息是监听Icc_state_change事件。触发是在UiccCardProvisioner类。
SubscriptionInfo框架解析_第3张图片
SubscriptionInfo框架解析_第4张图片
其中有重要的一步是判断所有的iccid是否加载到,全部加载到才去更新数据(updateSubscriptionInfoByIccId)。通过判断两张卡的iccid不为null,其中卡absent是将iccid置为""。 查询到所有卡槽的iccid时刻:
分三种情况:
1 UiccCardProvisioner.queryUiccProvisionInfo
2 sim locked :实际上这一步不会发生因为在UiccCardProvisioner.queryUiccProvisionInfo里面就已经可以通过QcRilhook查询到iccid。
3 sim absent:absent是将iccid置为""
下面是卡报pin码锁的时候获取iccid的流程,主要是通过fileHandler查询卡字段 EF_ICCID:2fe2
SubscriptionInfo框架解析_第5张图片
通过分析可以知道更新操作updateSubscriptionInfoByIccId,只有在添加和删除的时候会触发。该函数执行是一个耗时操作。

你可能感兴趣的:(SubscriptionInfo框架解析)