通话记录的名字与Phonebook同步
0赞[DESCRIPTION]
如何实现CallLog与Phonebook的同步?
[SOLUTION]
通话记录与Phonebook的同步,即Phonebook有更新的时候,同时来更新CallLog里面的联系人的名字,比如对于一个陌
生人的通话记录是没有名字的,但是把陌生人存入Phonebook后,CallLog就应该显示对应的Phonebook里面的名字。
在10A上已经有完善的同步机制,CallLog会处理Phonebook的添加、删除、更新联系人的3种事件来完成与Phonebook的
同步,需要处理相应哪几种事件也可以通过MMI_CLOG_STYLE_PHB_SYNC来进行配置。
但是在10A之前的版本,CallLog和Phonebook不存在任何同步机制,所以一下介绍一下在10A之前要实现CallLog与
Phonebook同步的解决方法。
方法1(只适用与09B,因为09A上还没有Callback Manager的机制).
在Mmi_cb_mgr_cfg.h里面添加对Phonebook相应事件的处理函数(如EVT_ID_PHB_ADD_CONTACT、
EVT_ID_PHB_UPD_CONTAT)。在处理函数里面,使用号码去匹配CallLog里面的全局变量chis_p里面通话记录的号码,如
果有相等则进行更新,并且同时更新到NVRAM里面去,更新到NVRAM的方法可以参考方法2里面的代码。
方法2
每次读取通话记录的时候,判断name是否为空,如果为空则去查找Phonebook,如果找到了,则同步更新到内存和
NVRAM。比如可以写一个函数:
void mmi_chist_update_name_with_phb(LOG_CALL *logCall,U8 type,U8 index)
{
if(!mmi_ucs2strlen(logCall->pbName))
{
U16 tmp_name[MMI_PHB_NAME_LENGTH * 2 + 1];
kal_int32 store_index=srv_phb_oplib_search(logCall->number,
SRV_PHB_SEARCH_TYPE_NUM); if(store_index>=0)
{ srv_phb_get_name(store_index,tmp_name, MMI_PHB_NAME_LENGTH +
1);
if(mmi_ucs2strlen(tmp_name))
{
mmi_chist_call_log_data *log_data;
log_data = OslMalloc(sizeof(mmi_chist_call_log_data));
memset((U8*) log_data, 0x00, sizeof(mmi_chist_call_log_data));
log_data->index=index;
log_data->type=type;
mmi_ucs2cpy((PS8*)logCall->pbName,(PS8*)tmp_name);
logCall->nameLength=mmi_ucs2strlen(logCall->pbName);
memcpy((U8*)&log_data->log,logCall,sizeof(LOG_CALL));
mmi_chist_add_action(1,log_data, (mmi_chist_action_func_ptr) ReqUpdateCallLogName,
(mmi_chist_action_cbk_ptr) mmi_chist_update_call_log_name_cbk);
}
} } }
然后在RspReadDialedNum、RspReadMissedNum和RspReadRecvdNum三个函数的for循环中的CHISTExtractPSCallLog语句
后面调用前面定义的函数即可。当然这里只考虑了单卡的情况,双卡的情况可基本的思路一致。