SubscriptionInfo框架解析

本章讨论所涉及到的类 [java] view plain copy 在CODE上查看代码片派生到个人代码片 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.javajava

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

在卡插入后,框架会在数据库中保存卡的信息,包括卡的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,只有在添加和删除的时候会触发。该函数执行是一个耗时操做。事件

相关文章
相关标签/搜索