iPhone联系人排序分组解决方案
从上一篇日志开始着手分析iPhone的联系人功能,到现在为止结合一些工具我想能够基本解决中文联系人排序以及分组的功能,从操作上来看应该也是比较简单的,特地放上来做个纪录,方便以后刷机后的操作。
2011年6月14日补充更新:
对于中文联系人在通讯录里的字母排序问题,现在有个比较简单有效的方式,但对于版本低于4.X的系统我未做测试,所以如果有任何问题可以提出来探讨。这里提到的解决方案只在iOS 4.x下测试通过。
总体思路是将中文语言下的排序方案复制到英文环境下即可,具体路径在/System/Library/Frameworks/AddressBook.framework/, 将zh_CN.lproj内的文件全部复制到English.lproj中覆盖,完成后将系统语言从中文切换到英文后再进入通讯录就可以发现中文的联系人已经按字母排序,这是目前为止最简单有效的方式。
实现原理:
获得iPhone的Addressbook.sqlitedb文件-使用SQLite Database Browser整理数据-覆盖回iPhone-利用91助手的一键排序功能排序-利用91助手实现分组-OK。
适用环境:
我的手机为 iPhone 一代 8G,OS 3.1。C小姐的为 iPhone 3G, OS3.1.2。
相关软件:
SQLite Database Browser - 十分强大的DB数据库文件编辑器,可以浏览数据表结构以及过程数据,同时可以使用SQLite的语法操作数据库,无比强大哈,我也是第一次用该工具来操作DB的数据库,嘿嘿,还好基本的SQL语法是通用的,所以并没有多大的难度。
91手机助手 for iPhone - 这个软件就不需要我多介绍了,呵呵,类似于其他手机的那种PC Suite软件,可以通过PC来管理手机上的音乐,短信,联系人,图片,铃声等,不过作为iPhone的Suite软件,还是很不简单的,虽然我看网络上很多人多91出品的软件都颇有微词,甚至有人大声谩骂,不过从我使用的这一年时间来说,这是个不可多得的好软件,尤其适合想偷懒的人。
iPhone USB Package - 需要说明的是这个并不算做是软件,名字也是我自己取的,因为这是一个专门整理出来,包含了好些命令行文件的包,利用它可以通过USB对iPhone内的数据进行访问,其中就包含了最牛X的iTunnel,还有putty以及WinSCP,嘿嘿,都是传输数据用的,之所以把这个包放在这里是因为我们需要先从iPhone里下载AddressBook.sqlitedb文件,也就是联系人数据库文件,而这个包里的东西最简单直接而且安全。当然了,通过91助手的文件管理功能也是可以实现的,不过我更偏向于用WinSCP来管理后台文件,呵呵。我把它传到新浪硬盘了。
操作方法:
下面开始简单纪录一下实现的过程。首先,利用WinSCP,访问iPhone的 /private/var/mobile/Library/AddressBook 路径,找到其下的 AddressBook.sqlitedb 文件,下载它到本地并保存。开始动手之前要养成好习惯,那就是备份,呵呵,将下载到的文件复制几份放到其他目录下备用。利用Browser软件打开刚才下载的的SQLite数据库文件,看下面的图就比较了解了。
这是数据库结构,玩数据这么些年,对于结构的设计还是很有感触的,Apple的工程师还是很牛的哈,呵呵,联系人的所有信息都包含在这一个文件里,而真正在手机里调用到这个数据库的地方好多,这就对结构设计有很高的要求啦。
浏览数据表,这里我做为例子的 ABPerson 其实就是今天的主角,它里面包含的就是我手机里的所有联系人的基本信息,当然,其他的信息会保存在其他表中,这就是数据库表结构设计的妙处哈。
SQL语句运行界面,呵呵,SQLite我没特意去多研究哈,相信和一般的SQL数据库是差不多的,上面我举了个例子,下面我们也要用到。
C小姐习惯在添加新联系人的时候把姓和名分开来纪录,最终在联系人列表里姓和名之间隔了几个空格,我自己倒认为这样不好看,显得空洞了些,另外这么做的一个缺点是iPhone会故意把姓用粗体而名用非粗体来表示,这就看起很奇怪了,所以这里我就会把姓和名连接起来,单独放到某一个字段,比方说姓或者名里都可以,然后把另外的一列清空即可。这个非常简单,用上面图中的SQL语句就可以把姓和名合并起来并全部放到姓这个字段里,然后再运行 Update ABPerson set Last=’’即可清空原来的名这一列内容。
另外,我在C小姐的手机里装了一个联系人排序的软件,运行一次以后没成想效果很差,更让我郁闷的是该软件会自动把姓和名的拼音的第一个字母写到联系人资料里去,目的就是为了让iPhone自动根据这个字母来排序,但是在手机里查看联系人信息的时候就会多出来几个字母,所以第二个要做的改变就是去掉拼音缩写字母。也非常简单,运行SQL: Update ABPerson Set LastPhonetic=’’,即可清空,当然是具体哪一列不一定的,要看实际的情况,将有字母的列清空即可。
到这一步为止数据库的整理操作基本完成,点上面的图标保存即可。接下来将我们修改过的DB文件覆盖回手机,重新启动一次就会发现联系人资料已经是姓名结合在一起,而且没有任何拼音的首字母了。
最后一步非常简单,打开91助手,切换到 资料管理 - 联络人, 全选你的联系人以后执行一键排序,完成以后点同步到手机,然后该程序会自动注销你的手机,完成以后再访问联系人的时候就会发现所有的联系人已经按照姓的首字母的顺序排列好了,而且右侧栏的快捷定位也非常好用,基本就达到了我们中文名字排序的目的。
至于分组就更加简单了,还是利用91助手的联系人管理,在91里面建立好自己想要的分组名称,然后将对应的联系人拖进去,完成以后同步到手机就能搞定分组的啦。不过我个人不太喜欢分组就没弄了,嘿嘿,偷懒哈。
总结:
总体来说这个思路还是比较简单,不过对于不同的情况来说需要做出不同的调整,还是要看自己的需要,我这里举的例子也只是依据我为C小姐整理手机的时候的操作来的,只能做为简单的参考吧。


Anonymous:
Posted on February 24th, 2011 at 2:02 PM
你好。。。。看了你的文章。。。我忍不住想问你几个问题。。
我的手机今次第一次自己升级到了4.0.并且之前手动导出了两个SQLITEDB的联系人文件,问题是我现在不能把这两个文件覆盖回去。所以想要寻求别的办法,先看看这两个文件中的数据。。。这个要怎么完整的查看?
Eric:
Posted on February 24th, 2011 at 5:17 PM
为什么不能覆盖回去呢?直接越狱后传上去覆盖就好了。要浏览sqlite文件需要用到我上面提到的Browser,但是也不能完整察看,里面有数据表结构,因此并不是直接可以看到某某人某某号码。信息分布在不同的表中。