SubscriptionController

本文Blog地址:http://blog.csdn.net/myfriend0/article/details/79364548

前言

SubscriptionController 即 SIM 卡信息控制器,用 Subscription 的描述方式来自 3GPP 协议,SIM 卡可被描述为 Subscriber。SubscriptionController 作为控制器,所以它所担负的责任是 SIM 卡信息的中转和管理工作。

在文章《UICC》中,对 SIM 卡信息的来源于管理有了充分的认识,对理解 SubscriptionController 可以发挥非常重要的作用。在手机开机或 SIM 卡变更等行为时,Phone 中的 RIL 加载到 SIM 卡的信息后,便把数据传至 SubscriptionController。另外需要注意的是,SubscriptionController 没有改变 SIM 卡原始数据(卡文件数据)的能力。

SIM 卡数据管理架构

本文中提到的 SIM 卡数据,如果没有特别说明,特指 Subscriber 方面的数据,不包括其他用户数据等。

增加SIM卡数据

当有一张新的 SIM 卡插入到手机,手机检测到有 SIM 卡插入,就会发起 SIM 卡数据的查询,UiccController 将查询得到的数据,传递到 SubscriptionController。流程如下:

下面着重分析一下几个重要的过程

updateSubscriptionInfoByIccId()

这个方法定义在文件 frameworks/opt/telephony/src/java/com/android/internal/telephony/SubscriptionInfoUpdater.java 中。

上面的方法中提到了 ICC ID,ICC ID为IC卡的唯一识别号码,共有20位数字组成。手机中通过 ICC ID 作为依据来识别不同的 SIM 卡。

Slot ID 和 手机上的卡槽对应,卡1的 Slot ID 为 0,卡2的 Slot ID 为 2,以此类推。

继续跟踪这个方法的下一步

这个方法定义在文件 frameworks/opt/telephony/src/java/com/android/internal/telephony/SubscriptionController.java 中。

请认真阅读代码中的注释了解这个方法的过程。

如果 SIM 卡数据有变化,系统会发送如下广播:

SIM info数据库主要信息sim info 字段

SubscriptionController 的介绍就到这里,因为这已经介绍了 SubscriptionController 的核心部分,其它的代码都是获取设置以上数据库中的信息,本文就不一一展开讨论他们了,过程也大多很简单,就是对数据库或者缓存数据进行查询和修改。

总结

SubscriptionController 的代码不多,业务也比较简单,主要弄懂 SubscriptionController 所管理的 SIM 卡信息的来源,传播途径,以及对 SIM 卡信息的维护这三个过程,subscriber 这块的知识在上层的应用基本就贯通了。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180225G0AZX000?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券