Android4.X 应用层读取SIM卡联系人的过程


  SIM卡里可以存储部分联系人数据 ,USIM卡也可以存储部分联系人数据,只不过USIM卡存储的联系人的数量更多,以及支持更多的联系人数据字段。
  在Android 的应用层 是通过IccProvider 来读取SIM卡里的联系人的,主要有三个步骤
  1.IccProvider 根据 EF_ID ,调用 IccPhoneBookInterfaceManager 的getAdnRecordsInEf 方法读取 电话本数据
  2.IccPhoneBookInterfaceManager 从AdnRecordCache 中读取SIM卡的联系人数据,我们以GSM的SIM和WCDMA的USIM卡为例来说明.IccPhoneBookInterfaceManager 是一个Binder 服务类,Biner 接口是 IIccPhoneBook。AdnRecordCache 首先根据ef id 判断 要读取的联系人是2G SIM卡联系人还是3G USIM 卡联系人,如果是USIM,AdnRecordCache 就调用UsimPhoneBookManager 去加载 USIM卡上的联系人,如果是SIM,则按照2G SIM卡的方式去读取SIM卡联系人。读取SIM卡联系人数据的过程是异步的。IccPhoneBookInterfaceManager 会在getAdnRecordsInEf 方法中一直等待SIM卡联系人数据加载完毕,这个是通过同步对象的wait 方法实现的。在SIM卡联系人数据加载完毕之前,getAdnRecordsInEf 所在的线程都是被阻塞的。直到将所有的SIM卡联系人数据全部读取完毕,getAdnRecordsInEf 所在的线程才会被唤醒。全部数据就会返回给IccProvider . 在IccRecords 对象的初始化的时候,AdnRecordCache 并没有去读取SIM卡上的联系人的数据,所以在AdnRecordCache 第一次读取SIM卡上的联系人的数据所花费的时间会比较长,第二次读取的时间会快很多。
  3.IccProvider 将返回的数据,封装成Cursor 返回给应用层。

       读取过程时序图如下

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值