Rainux早上留言说,CM的5.0.7开始支持G1了,而且速度很快。这让我又痒痒了。看了眼xda,现在还是test1,得等等才能用。为了用的时候马上就能爽,于是又跑进eclair的代码里,寻找拼音检索的解决方案。
折腾了一天,得出的结论是:
- Eclair已经可以用email地址中@前的字符,以及nickname(编辑联系人时点more可以添加多个nickname)检索联系人;
- 所以,我认为结合email、nickname和中文输入法检索,挺方便了。补丁有些不必要了。
如果有朋友还是想要拼音检索,我这里提供一些经验和思路,感兴趣的可以自己弄。
/data/data/com.android.providers.contacts/databases/contacts2.db是联系人数据库文件。其中表name_lookup保存所有的检索关键词,data_id和raw_contact_id分别对应data和raw_contact表。normalized_name就是检索关键词,以sortkey的16进制形式保存。name_type数值的含义定义在packages/providers/ContactsProvider/src/com/android/providers/contacts/ContactsDatabaseHelper.java中的NameLookupType类里。normalized_name多增加几行数据,就多几个关键词。
packages/providers/ContactsProvider/src/com/android/providers/contacts/NameNormalizer.java下定义的NameNormalizer::normalize(String name),是所有(至少我看到的都是)检索关键词入库前都要经过的一道处理。其实在这里把中文都转成拼音,就能实现拼音检索,但这样中文检索就没有了,而且不能实现简拼。
packages/providers/ContactsProvider/src/com/android/providers/contacts/ContactsProvider2.java下定义的StructuredNameRowHandler类,当姓名发生添加/变化时,该类都会被触发。如果在这里自动根据姓名生成若干全拼、简拼字串,然后把这些字串都添加到name_lookup里(调用insertNameLookupForStructuredName()就行),就可以实现拼音检索,而且不影响中文检索。这也许是最容易做到的了。但是不是肯定能实现,得实验才知道。
现在没兴趣(如果有人送我个N1,没准我就会有兴趣了,^_^)继续弄下去了,感兴趣的继续吧。
请问你这里的方案中文联系人是自动排序的吗?
排序是排序,检索是检索,两者没有任何关联
那有中文排序的方法吗?
有,在:http://blog.sunner.cn/2009/04/android_pinyin_sorting/
哥们,这个日记没有了 啊?
http://blog.sunner.cn/android_pinyin_sorting/
地址变了
看到了,非常谢谢。想问一下这个排序方案适合Android 2.1的版本吗?
虽未测试,但我相信适合。因为很多中文的rom都带这个功能
非常好的思路,
理论上看,
String name = values.getAsString(StructuredName.DISPLAY_NAME);
把这个得到的name转换成拼音,再用insertNameLookupForStructuredName写到检索表里面,应该就能用拼音检索了。
我有空的时候试试看,谢谢!
你好,我一些关于2.1contacts的问题想要请教你,希望你能抽空帮下,谢啦 我QQ 285545974 邮箱就上面那个。。。 打扰了