SubscriptionInfo框架分析

来源:互联网 发布:女朋友胸很大知乎 编辑:程序博客网 时间:2024/06/05 06:01

本文讨论所涉及的类

vendor\qcom\proprietary\telephony-fwk\opt\telephony\src\java\com\qti\internal\telephony\UiccCardProvisioner.java  vendor\qcom\proprietary\telephony-fwk\opt\telephony\src\java\com\qti\internal\telephony\QtiSubscriptionInfoUpdater.java  frameworks\opt\telephony\src\java\com\android\internal\telephony\SubscriptionInfoUpdater.java  frameworks\opt\telephony\src\java\com\android\internal\telephony\SubscriptionController.java  frameworks\base\telephony\src\java\android\telephony\SubscriptionManager.java  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里面的方法。
这里写图片描述

这里写图片描述

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类。
这里写图片描述

这里写图片描述
其中有重要的一步是判断所有的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

这里写图片描述

通过分析可以知道更新操作updateSubscriptionInfoByIccId,只有在添加和删除的时候会触发。该函数执行是一个耗时操作。

1 0
原创粉丝点击