上周拿到小米。最近一周在嘗試開發通迅薄。一方面是系統內建的通迅薄的確有些不爽的地,一方面也是想嘗試寫一些手機應用。
中間碰到兩個問題,估計其它人也會碰到,就一併寫下。
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也的確比較亂點,中文資料也很少(個人觀點)。