Goodspeed

导航

Android开发,通迅薄的注意事项

上周拿到小米。最近一周在尝试开发通迅薄。一方面是系统自带的通迅薄的确有些不爽的地,一方面也是想尝试写一些手机应用。

中间碰到两个问题,估计其它人也会碰到,就一并写下。

1 效率太慢。

网上有大量的帖子(如http://blog.csdn.net/yao_guet/article/details/6626001),先要去查所有联系人(有些人根本没有电话),接着去查电话纪录(一个人可能有多个电的话)。如果你的联系很多,比如像我有600多个联系人,那打开通迅薄差不多要3秒以上(小米的硬件还是很强悍的)。问题的关键就这在两个while上。

其实只需要直接查询ContactsContract.CommonDataKinds.Phone.CONTENT_URI就可以拿到DisplayName和PhoneNumber。我想内部很可能只查了一个表就搞定了。

另外,我的应用只需要手机,所以加上以下条件

StringBuffer selection = new StringBuffer()
.append(pn + " NOT LIKE '106%'")
.append(" and substr("+pn+",0,3) != '106'")
.append(" and "+pn + " NOT LIKE '010%'")
.append(" and length("+pn + ") >= 11")
.append(" and ("+pn + " LIKE '1%' or "+pn + " LIKE '01%')");

基本上够我用了。

针对查询速度问题,有熟手自己写AyncQueryHandler。我这种菜鸟没敢尝试。

 

2 通迅薄拼音排序

网上的例子大部份都是 

sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";

本来以为Sqlite和SQL server差不多应该能换那个LOCALIZED,结果都不行。

其实一句话就能搞定

sortOrder = "sort_key_alt";

我想可能在表中有个字段就叫sort_key_alt。

 

二个问题都很常见,网上也有很多人问,不过正确答案确不多。另外,Android的API也的确比较乱点,中文资料也很少(个人观点)。

posted on 2011-12-17 22:49  Goodspeed  阅读(496)  评论(0编辑  收藏  举报