在android 系统中,和通话记录相关的有4个界面,还有一些其他功能。
第一个界面是dialer启动之后的三个界面之一的通话记录,这三个界面分别是收藏的联系人/通话记录/所有联系人。是DialtactsActivity对应的Fragment为CallLogFragment,通过ListsFragment实现的, ListsFragment的getItem方法如下,
switch (getRtlPosition(position)) {
case TAB_INDEX_SPEED_DIAL: //快速拨号界面
mSpeedDialFragment = new SpeedDialFragment();
return mSpeedDialFragment;
case TAB_INDEX_RECENTS: //普通通话记录
mRecentsFragment = new CallLogFragment(CallLogQueryHandler.CALL_TYPE_ALL,
MAX_RECENTS_ENTRIES, System.currentTimeMillis() - OLDEST_RECENTS_DATE);
return mRecentsFragment;
case TAB_INDEX_ALL_CONTACTS://所有联系人界面
mAllContactsFragment = new AllContactsFragment();
return mAllContactsFragment;
case TAB_INDEX_VOICEMAIL:// VOICEMAIL 界面
mVoicemailFragment = new CallLogFragment(Calls.VOICEMAIL_TYPE);
return mVoicemailFragment;
}
点击一个通话记录项,可以进入添加联系人界面,并且可以将当前的通话号码添加到联系人中,另外还可以给通话号码发送短信,还可以查看有关的通话详细信息。
第二个界面是CallLogActivity界面,不仅可以查看所有通话,还可以仅仅查看去电/来电/未接来电类型的通话记录;还可以进入通话记录查询界面和删除通话记录界面。
CallLogActivity界面对应的Fragment为MsimCallLogFragment, CallLogActivity的内部类MsimViewPagerAdapter的getItem方法如下,
case TAB_INDEX_MSIM:
mMSimCallsFragment = new MSimCallLogFragment();
return mMSimCallsFragment;
第三个界面是通话记录查询界面,对应的Fragment为CallLogSearchFragment,可以根据通话记录的电话和姓名信息搜索通话记录;第四个界面是通话记录的删除界面,在这里可以删除通话记录,和其他联系人信息操作同在一个activity中,对应的activity为MultiPickContactActivity,在后面再详细论述。
至此,对于数据库的增删改查方法,通话记录的信息不能修改,也不能随便插入,是通话结束后由系统生成的通话信息并插入数据库;插入过程前面已经论述过了。下面主要论述查询和删除过程,也就是上面的4个fragment详细实现过程。
Fragment和CallLogQueryHandler架构图如下,这一部分架构主要是Fragment发起异步查询数据库的过程。
三种通话记录的查询方式不同,CallLogFragment一进入就查询所有通话记录;
MsimCallLogFragment可以查看四种方式,分别是所有通话记录,去电,来电以及未接通话记录,有一个选择的过程;
CallLogSearchFragment是以姓名和号码进行搜索,有一个输入的过程。