首页 Mtk电话本介绍

Mtk电话本介绍

举报
开通vip

Mtk电话本介绍Mtk电话本介绍 1、 电话本分类 目前mtk平台上,我们在使用的有三类电话本。分别是列表式、矩阵式和T卡电话本。 其中,列表式电话本是mtk自带的,我们对其查找算法做了改动,并做了分类显示,即将列表按条目的存储位置分为全部、sim卡1、sim卡2和手机四类列表;矩阵式电话本是我们自己做的,主要是对显示风格进行了改变,数据结构依赖于之前的列表式电话本的数据结构;T卡电话本是一个我们自己做的一个完全独立的电话本,在数据结构和显示上都是独立的。 列表式和矩阵式界面布局如下所示。 图1. 列表式电话本 ...

Mtk电话本介绍
Mtk电话本介绍 1、 电话本分类 目前mtk平台上,我们在使用的有三类电话本。分别是列表式、矩阵式和T卡电话本。 其中,列表式电话本是mtk自带的,我们对其查找算法做了改动,并做了分类显示,即将列表按条目的存储位置分为全部、sim卡1、sim卡2和手机四类列表;矩阵式电话本是我们自己做的,主要是对显示风格进行了改变,数据结构依赖于之前的列表式电话本的数据结构;T卡电话本是一个我们自己做的一个完全独立的电话本,在数据结构和显示上都是独立的。 列表式和矩阵式界面布局如下所示。 图1. 列表式电话本 图2. 矩阵式电话本 T卡电话本作为独立的电话本,也拥有列表和矩阵两种显示风格。当选择T卡电话本标签时,已进入了新屏,并非仅仅是当前屏的数据刷新。 2、 数据结构 1.列表式电话本主要数据结构 (1) 电话本条目对应的内存数据 MMI_PHB_ENTRY_BCD_STRUCT PhoneBook[MAX_PB_ENTRIES]; 该数组包含的信息有:姓名、号码和域标识(即,标识哪些域的信息不为空)。姓名是unicode编码,号码是bcd编码。存放在手机上的域有姓名、电话号码、家庭电话、公司名称、电子邮件地址、公司电话、传真号码、生日、来电图片、来电铃声和来电群组。存放在sim卡上的域只包括姓名和电话号码。 各类存储介质上的条目导入内存后,在数组PhoneBook中的分布如下图。 1 2 …… n 1 2 …… n 1 2 …… n 手机 sim卡1 sim卡2 这三块区域是固定的,从手机上读入的数据依次放入手机区域里,从sim卡1上读入的数据依次放入sim卡1区域,从sim卡2上读入的数据依次放入sim卡2区域。 要注意的是,导入的数据并不是从头至尾依次存放到数组中的,而是按区域存放的。 (2) 拼音排序后的索引表 U16 g_phb_name_index[MAX_PB_ENTRIES]; 该数组中存放的是条目在PhoneBook数组中的下标。列表电话本的显示就是依据该数据,依次将PhoneBook中的数据呈现给用户。 (3) 号码查找表 MMI_PHB_LOOKUP_NODE_STRUCT LookUpTable[MAX_LOOKUP_TABLE_COUNT]; 该表将在拼音排序完毕后,启动定时器进行生成。数组中的每个元素包括号码后11位对应的整型数据和该号码所属条目对应的store_index。store_index指的是条目在数组PhoneBook中的下标值,从0开始索引。 (4) 电话本模块的上下文 mmi_phb_context_struct g_phb_cntx; 这个上下文的结构体成员比较多,在这里我着重介绍几个非常重要但使用起来比较容易出错的成员。 a. active_index 这个成员用来 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 在列表电话本界面,当前用户高亮条目的索引。注意,该索引是针对数组g_phb_name_index的下标索引。通过该索引,要想访问到真正的条目数据还需要一系列的转换。 b. active_index_second 这个成员的作用同active_index,只是使用在其他模块进入电话本的情况下。 c. active_index_third 这个成员主要用在,我们在使用一个条目的号码时,有多个号码可供选择的情况下。 d. quick_search_filter 这个成员是我们对mtk的电话本查找算法修改以后,新增的一个成员。主要用来存放查找结果的索引表。在索引表中的索引是针对数组PhoneBook数组的下标索引。 2.矩阵式电话本主要数据结构 矩阵式电话本和列表式电话本由于只是在显示风格上有诧异,因此,与列表电话本的基础数据结构是一样的。只是为了适应新的显示风格,定义了一些额外的数据结构。 针对矩阵电话本,主要是新增了一个上下文的全局变量g_qsearch_matrix_phb_cntx。该变量是一个比较大的结构体,在这里着重介绍几个关键的成员。 (1) g_qsearch_matrix_phb_cntx.qsearchStruct 当时为了与列表电话本互不干扰,另外定义了一套用于快速查找的数据结构。其中的成员maskFilter用作筛选查找列表;ptrQSearchResultList用于存放查找结果列表,记录的是记录的store_index,即数组PhoneBook数组的下标值。 (2) g_qsearch_matrix_phb_cntx.entryBody.numbersOneScr 备份当前屏所有条目对应的电话号码。 (3) g_qsearch_matrix_phb_cntx.entryBody. nameOneScr 备份当前屏所有条目对应的姓名。 (4) g_qsearch_matrix_phb_cntx. firstNameData 矩阵电话本与列表电话本相比,新增了姓氏查找的功能。g_qsearch_matrix_phb_cntx. firstNameData. ptrFirstNameList即为姓氏查找表。表中的每个元素包括姓氏对应的第一个汉字、该汉字对应的全拼和第一个以该姓氏开头的条目的store_index。 3.T卡电话本主要数据结构 T卡电话本的数据都是以文件的形式存放在T卡上。只有在使用的时候,才会导入内存。由于T卡电话本容量大,所需的内存都是动态分配和释放的。 这里先介绍一下组织T卡电话本数据所涉及到的三个文件。 (1) TCardPHB\TCardPhb.txt 存放在该文件上的信息,是T卡电话本中所有条目的详细信息。该文件是一系列record的集合,一个record记录对应一个条目。每个record是TCARD_PHB_RECORD类型的。该结构体包含了T卡电话本上一个条目所拥有的所有信息。包括姓名、电话号码、家庭电话、公司名称、公司电话、邮件地址、传真号码和生日。 该文件的作用类似与列表电话本的PhoneBook数组,只是两者所使用的空间不一样。 (2) TCardPHB\ FNS.txt 字母查找表。该文件供T卡电话本字母查找使用。该文件上的信息也是一个个record的序列。每个record对应T卡电话本中的一个条目,每个record的类型是TCARD_PHB_FIRST_NAME_RECORD。包括姓名首字母字符串、姓名全拼字符串、首字母字符串对应的key code字符串、条目域flag和该条目的store_index,这里的store_index只该条目对应的详细信息在文件TCardPhb.txt中的位置。 (3) TCardPHB\ NUMINFO.txt 号码查找表。该文件供查找T卡电话本中的号码使用。依然是一个个record的集合。每个record的类型是MMI_PHB_LOOKUP_NODE_STRUCT。包括号码后11后转换的整型和该号码所属条目的store_index. 所有对T卡电话本的操作,都将转换成对文件的操作。 针对T卡电话本的显示和交互主要涉及一个上下文全局变量g_tcard_phb_cntx,类型为tcard_phb_context_struct。该结构体成员较多,在这里也只介绍几个重要的成员。 (1) g_tcard_phb_cntx. ptrRecords 动态分配内存后,将装载条目的详细信息。 (2) g_tcard_phb_cntx. ptrData 动态分配内存后,将装载所有条目的字母查找表。 (3) g_tcard_phb_cntx. ptrTCardLookupTable 动态分配内存后,将装载所有条目的号码查找表。 (4) g_tcard_phb_cntx. strokCachePtr T卡电话本为了支持笔划查找,该成员在动态分配内存后,将存放针对电话本所有条目转换后的笔画cache。 (5) g_tcard_phb_cntx. qsearchListFillter 存放查找结果的store_index. 3、 数据存储 1.列表式电话本主要数据存储和读取 由于每个条目的姓名和号码信息在开机初始化时,已全部导入内存,在访问这两个信息时,只需读取相应的内存数据即可,在这里就不再对这两个数据的存储作过多的介绍。下面主要介绍条目中其他域信息的存储和读取。 对于存放在手机上的条目,除了姓名和号码,还有家庭电话、公司名称、电子邮件地址、公司电话、传真号码、生日、来电图片、来电铃声和来电群组。下面详细介绍这些域中的信息如何存储和读取。 首先,这些信息都存放nvram中。 其中,每个条目中的家庭电话、公司名称、电子邮件、公司电话和传真号码这五个信息作为nvram NVRAM_EF_PHB_FIELDS_LID的一个record进行存储。因此,该nvram的record个数和手机的存储容量是相等的。跟存放在数组PhoneBook手机区域的条目是一一对应的关系。即,此处需要注意的是,在访问nvram NVRAM_EF_PHB_FIELDS_LID读取相应条目的相关信息时,要用该条目的store_index加1作为访问nvram的record index。 在存储时,家庭电话、电子邮件、公司电话和传真号码使用的是ascii码,公司名称使用的是unicode编码。 参考代码如下。 …. …. mmi_ucs2_to_asc((PS8) PhoneBookOptionalFields.homeNumber, pbHomeNumber); mmi_ucs2cpy((PS8) PhoneBookOptionalFields.companyName, pbCompanyName); mmi_ucs2_to_asc((PS8) PhoneBookOptionalFields.emailAddress, pbEmailAddress); #if defined(__MMI_PHB_OPTIONAL_FIELDS_2ND_EMAIL__) mmi_ucs2_to_asc((PS8) PhoneBookOptionalFields.emailAddress2, pbEmailAddress2); #endif mmi_ucs2_to_asc((PS8) PhoneBookOptionalFields.officeNumber, pbOfficeNumber); mmi_ucs2_to_asc((PS8) PhoneBookOptionalFields.faxNumber, pbFaxNumber); WriteRecord( NVRAM_EF_PHB_FIELDS_LID, (U16) (store_index + 1), (void*)&PhoneBookOptionalFields, OPTIONAL_FIELDS_RECORD_SIZE, &pError); …. …. 为了加快电话本的数字查找速度,将存储在手机上的所有条目对应的家庭电话、公司号码和传真号码,以bcd码的形式存于内存数组phb_optional_number中。 另外,每个条目中的来电图片、来电铃声和来电群组信息存放在nvram NVRAM_EF_PHB_IDS_LID中。该nvram的一个record包括85(OPTIONAL_IDS_RECORD_TOTAL)个条目的相关信息。因此,每读一次该nvram,将包含85个条目的信息。必须经过相应的计算才能定位到所需的条目信息。 参考代码如下。 …. …. optid_record = (store_index / OPTIONAL_IDS_RECORD_TOTAL) + 1; optid_index = store_index - (optid_record - 1) * OPTIONAL_IDS_RECORD_TOTAL; ReadRecord(NVRAM_EF_PHB_IDS_LID,optid_record,(void*)PhbOptIDs, OPTIONAL_IDS_RECORD_SIZE, &pError); …. …. 最后,每个条目中的生日信息存放在nvram NVRAM_EF_PHB_BIRTHDAY_LID中。该nvram的一个record包含250(NVRAM_EF_PHB_BIRTHDAY_COUNT)个条目的相关信息。因此,每读/写一个该nvram,将包含250个条目信息。要想定位到某个特定的条目,还必须经过一系列的计算。 参考代码如下。 …. …. bday_record = (store_index / NVRAM_EF_PHB_BIRTHDAY_COUNT) + 1; bday_index = store_index - (bday_record - 1) * NVRAM_EF_PHB_BIRTHDAY_COUNT; ReadRecord(NVRAM_EF_PHB_BIRTHDAY_LID, bday_record, (void*)bday_data, NVRAM_EF_PHB_BIRTHDAY_SIZE, &pError); bday_data[bday_index].bYear = year; bday_data[bday_index].bMonth = (U8) month; bday_data[bday_index].bDay = (U8) day; WriteRecord(NVRAM_EF_PHB_BIRTHDAY_LID, bday_record, (void*)bday_data, NVRAM_EF_PHB_BIRTHDAY_SIZE, &pError); …. …. 2.T卡电话本主要数据存储和读取 T卡电话本的数据都是以文件的形式存放在T卡上。涉及的文件夹是TCardPHB,该文 件夹下有三个隐藏的文件TCardPhb.txt、FNS.txt和NUMINFO.txt。 这三个文件中只要有一个文件的数据被破坏,T卡电话本都将无法使用。 文件的组织结构在前面已做了相应的介绍,结合文件操作,就可以存取相关的数据。 4、 查找算法 电话本查找现在有字母查找、数字查找和笔划查找三种。 1.字母查找 对于字母查找,各类电话本现在使用的查找算法都是一样的,我们称之为模糊查找算法。所谓模糊查找,具体是指,手机键盘上某一个按键上对应的数字和字母,我们都认为是相等的。例如,按键2对应着数字2和字母A,B,C,在字符串比较的时候,我们认为它们彼此之间都是相等的。 字母查找包括首字母查找和全拼查找。 主要的实现方式是,对于电话本的每个条目,在初始化时,我们将建立一系列对应的查找表g_phb_name_first_pinyin_cach、g_phb_name_first_pinyin_key_code_cache和g_phb_name_pinyin_index。g_phb_name_first_pinyin_cache中存放姓名拼音的首字母,g_phb_name_first_pinyin_key_code_cache中存放的是姓名拼音首字母对应的key code,g_phb_name_pinyin_index中存放的是姓名全拼字符串。在输入的字符为字母的情况下,先将输入的字符串转换为对应的key code字符串,然后与g_phb_name_first_pinyin_key_code_cache和g_phb_name_pinyin_index对应的key code字符串进行比较,如果比较成功,将把相应的store_index放入查找结果列表quick_search_filter中。 转换表如下。 keys key0 Key1 Key2 Key3 Key4 Key5 Key6 Key7 Key8 Key9 code 48 49 50 51 52 53 54 55 56 57 code 32 33 97 100 103 106 109 112 116 119 35 98 101 104 107 110 113 117 120 36 99 102 105 108 111 114 118 121 39 65 68 71 74 77 115 84 122 40 66 69 72 75 78 80 85 87 41 67 70 73 76 79 81 86 88 44 82 89 45 83 90 46 47 58 63 64 95 转换接口为:mmi_phb_get_keybrd_mapping_code。 2.数字查找 数字查找采用子串匹配的方式进行。查找范围包括条目的姓名、电话号码。对于存放在手机上的条目,还包括家庭电话、公司号码和传真号码。 与姓名比较时,使用的是unicode码制;与其他号码比较时,使用的是bcd码。 3.笔划查找 笔划查找时,主要的思想是,根据当前输入法将姓名转换为笔划序列,然后与输入的笔划序列逐一进行比较。 为了加快查找速度,在查找之前都会先建立一个待查找的子列表。对于电话本模块本身,通过标识phbListView进行筛选;对于其他模块进入电话本的情况,通过field域进行筛选,即,只考虑那些所关注的域信息不为空的条目。 通过标识g_phb_quick_search_enter区分目前是电话本模块本身在使用电话本,还是其他模块在使用电话本。当g_phb_quick_search_enter == MMI_PHB_QUICK_SEARCH_MAIN时,表示是电话本模块本身在使用电话本;当g_phb_quick_search_enter == MMI_PHB_QUICK_SEARCH_GENERIC时,表示是其他模块启用了电话本模块。 5、 其他模块使用电话本 与电话本相关的模块有通话、信息、通话记录、拨号和速拨。在这里着重介绍一下其 他模块使用最多的几个接口。 1. lookUpNumber 该接口是利用传入的unicode编码的电话号码,查找电话本。当在电话本中有这个号码时,返回该号码对应的姓名指针,否则,返回为NULL。 2. mmi_phb_list_pre_entry_for_number_and_email 该接口用于其他模块启动电话本模块。 3. mmi_phb_call_get_data_for_call_mgnt 呼入/呼出将调用该接口,查找当前号码的一些相关信息。包括姓名、来电图片、来电铃声和来电群组。 值得注意的是,当来电图片和来电群组都不为空时,最终显示的图片是这里设置的来 电图片,而不是所属群组的图片。
本文档为【Mtk电话本介绍】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_438014
暂无简介~
格式:doc
大小:161KB
软件:Word
页数:9
分类:互联网
上传时间:2018-09-07
浏览量:21