开机导入Sim卡联系人流程分析

本文详细解析了ContactsProvider如何在设备启动时清除非本地联系人,并从SIM卡读取联系人信息,包括启动广播接收器、读取SIM卡、加载联系人数据等流程。

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值