6.3 联系人操作
在前面已经论述过, SIM卡中的联系人是保存在单独的数据库中,其对应的Provider为IccProvider,在packages\services\Telephony 路径下,也就是phone进程中。并且,增删改查直接看jar包中的IccProvider类就可以了, IccProvider路径如下,
frameworks/opt/telephony/src/java/com/android/internal/telephony/IccProvider.java
IccProvider中对应的4个增删改查的方法分别对应, query/ insert/ delete/ update 方法。
其中insert/ delete/ update 三个方法都是调用updateIccRecordInEf方法实现。
3.1 查询
IccProvider中有3种类型的电话本,分别是ADN/FDN/SDN, FDN/SDN 用的比较少, sim卡上的电话本就是ADN。当然,处理过程也是大同小异,只看AND的处理。
IccProvider的query方法主要逻辑就是根据不同类型分别调用loadFromEf方法进行处理。
对AND的处理如下,
case ADN: //默认SIM卡
return loadFromEf(IccConstants.EF_ADN, SubscriptionManager.getDefaultSubId());
case ADN_SUB: // 双卡双待
return loadFromEf(IccConstants.EF_ADN, getRequestSubId(url));
调用流程图如下,
loadFromEf方法主要逻辑如下,
1,调用UiccPhoneBookController的getAdnRecordsInEfForSubscriber方法进行查询,将结果封装成AdnRecord,
List<AdnRecord> adnRecords = null;
try {
IIccPhoneBook iccIpb = IIccPhoneBook.Stub.asInterface(
ServiceManager.getService("simphonebook"));
if (iccIpb != null) {
adnRecords = iccIpb.getAdnRecordsInEfForSubscriber(subId, efType)