开机导入Sim卡联系人

  1. ContactsProvider
  2. Contacts

ContactsProvider

1.ContactsProvider.apk会启动一个广播接收器SystemStartReceiver来接收BOOT_COMPLETED的广播。

2.ContactsProvider收到该广播后,将raw_contacts表里所有非本地联系人的数据都删除掉。
然后读取当前是否存在Sim卡,若存在,则发SYNC_ICC_CARD_CONTACTS广播。

3.SystemStartReceiver收到广播后启动一个thread来执行读取sim卡联系人,并发送MSG_NOTIFY_ICC_LOADING的message给主线程,主线程收到后发loadicccontacts广播。

4.开始读取ICC数据库的内容,IccProvider中会执行loadFromEf(),获得IIccPhoneBook接口,通过AIDL调用getAdnRecordsInEf()方法,获取sim卡上的全部联系人数据,返回cursor并装载成ArrayList。

5.子线程给主线程发送MSG_NOTIFY_ICC_CHECKFINISHING的message,表示ICC读取完毕。主线程会发loadicccontacts广播。

6.子线程发送消息MSG_INSERT_NEW_CONTACTS给主线程,进行数据库批量处理的操作,即把几个ContentProviderOperation打包在一起,Transaction事务机制,通过applyBatch()方法,主线程将这些sim卡联系人逐个的添加到raw_contacts表和data表中.

Contacts

Contacts 收到loadicccontacts的广播,设置当前sim卡联系人已经开始读取,LOADICC_START
Contacts 收到loadicccontacts的广播,设置当前sim卡联系人已经读取完毕,LOADICC_FINISH


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 450603622@qq.com

文章标题:开机导入Sim卡联系人

文章字数:293

本文作者:steinswang

发布时间:2018-01-15, 22:54:34

最后更新:2020-02-03, 11:15:26

原始链接:http://yoursite.com/2018/01/15/import-Sim-card-contacts-when-boot/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录