本帖最后由 13599923119 于 2015-8-24 12:42 编辑
原生拨号盘搜索分析 联系人数据库contacts2.db中的表Search_index用于拨号盘输入数字搜索联系人。 例如诸葛亮,通过Hanzitopinyin.java得到它的拼音zhu ge liang,转换成数字就是 [url=]948 43 54264[/url],再通过处理保存到字段name_digit。 字段name_digit保存如图下 file:///C:/Users/Administrator/AppData/Local/YNote/data/qqD700EBFFDFBC8D66251B1B05A1AB9541/642ac5254cb84829a821c18741484842/lip_image001.png file:///C:/Users/Administrator/AppData/Local/YNote/data/qqD700EBFFDFBC8D66251B1B05A1AB9541/642ac5254cb84829a821c18741484842/lip_image001.pngfile:///C:/Users/Administrator/AppData/Local/YNote/data/qqD700EBFFDFBC8D66251B1B05A1AB9541/642ac5254cb84829a821c18741484842/lip_image001.png 保存的字段就是把诸葛亮的所有简拼,全拼都保存起来了,如下 诸葛亮9484354264 945 葛亮 43554264 45 亮 54264 5 packages\providers\ContactsProvider\src\com\android\providers\contacts\ContactsProvider2部分截图如下 file:///C:/Users/Administrator/AppData/Local/YNote/data/qqD700EBFFDFBC8D66251B1B05A1AB9541/90335f031c1b48f3889d76114f42641a/lip_image002.png 截图中红圈就是根据全屏,简拼,号码来匹配。 结论:原生代码是把联系人名字所有的简拼/全拼对应的数字保存起来,每当拨号盘输入数字,就是搜索数据库,判断输入的数字是否匹配数据库里保存的数字。这种方法匹配出来的联系人,排序没有规则。同时匹配的条件太松,会导致搜索出来的联系人过多,比如只输入一个数字时,含有该数字的所有号码都匹配。
|