sim卡联系人读取流程

来源:互联网 发布:优化电脑配置的软件 编辑:程序博客网 时间:2024/06/05 05:18

SIM卡联系人读取流程

源代码路径  frameworks/base/telephony/java/com/android/internal/telephony/


联系人的标记为EF_ADN

(一)、外部读取sim卡联系人是通过IccProvider来调用的

而IccProvider是通过aidl的接口调用IIccPhoneBook.Stub.asInterface(ServiceManager.getService(“simphonebook”))来得到IccPhoneBook的对象,这个对象的实现是由IccPhoneBookInterfaceMangerProxy来实现的。IccPhoneBookInterfaceMangerProxy实现了IccPhoneBook.stub定义的接口

在IccPhoneBookInterfaceMangerProxy的构造函数中调用了ServiceManager.addService(“simphonebook”,this)来注册了IccPhoneBookInterfaceMangerProxy实现的接口。

 

(二)、sim卡联系人读取的内部逻辑

1、IccPhoneBookInterfaceMangerProxy接口实现调用IccPhoneBookInterfaceManger接口实现

2、IccPhoneBookInterfaceMangerProxy和IccPhoneBookInterfaceManger都是在PhoneProxy中被实例化的。

3、IccPhoneBookInterfaceManger在构造的时候被传进了一个PhoneBase的对象,但这个Phone对象并没有参与sim卡联系人的读取操作。它的接口函数有:

(1)getAdnRecordsInEf //获取sim联系人

通过调用AdnRecordCache的requestLoadAllAdnLike函数来实现的,并发出EVENT_LOAD_DONE的消息

(2)updateAdnRecordsInEfByIndex //更新联系人

通过调用AdnRecordCache的updateAndByIndex来实现的,并发出EVENT_UPDATE_DONE

4、IccPhoneBookInterfaceManger有个继承类SimPhoneBookInterfaceManger(for gsm):这个继承类实例化了IccPhoneBookInterfaceManger中AdnRecordCache的对象

5、AdnRecordLoader

PhoneBase是这个类的一个成员变量,其成员函数loadFromEF中调用了PhoneBase.mIccFileHandler.loadEFLinearFixed函数

 

6、在PhoneBase类中

有一个IccFileHandler的成员对象,PhoneBase的继承类有GSMPhone(for gsm)和CDMAPhone(for cdma)。IccFileHandler的成员对象是在GSMPhone和CDMAPhone实例化的。

 

7、IccFileHandler

此类从sim卡读取相关内容,成员函数LoadEFLinearFixed

它的继承类SIMFileHandler(for gsm)和RuimFileHandler(forcdma)

 

8、IccRecords

这个类有两个继承类SIMRecords(for gsm)和RuimRecords(for cdma)通过IccFileHandler执行了一些从sim卡加载数据的操作。这个类在构造的时候穿入了PhoneBase的对象,这个类通过PhoneBase的成员变量IccFileHandler执行从sim卡加载数据的操作

 

9、SIMRecords

在这个类中监听了EVENT_SIM_READY消息,收到这个消息后会调用fetchSimRecords()来读取sim卡中的records

原创粉丝点击