1 排序
contactlocaleUtils.getBucketLabel()
獲取排序字段rawcontact下的 phonebook_label (之前是 sort_key)
聯繫人裏面用到排序的流程:
contactsdatabaseHelper.UpdaterawContactDisplayname()方法會在插入,更新,數據庫更新的時候都會被調用
這裏包含了對排序字段的更新。
通過工具類:contactlocaleUtils.getbucketIndex() 和 getBucketLabel進行確定更新內容
getbucketIndex 主要是過濾掉特殊字符的影響(+ - ().#)既去除這些特殊字符再進行歸類
getBucketLabel 根據index 分別放到 三個類別中: 字母對應# 其他特殊字符對應 空 字母對應字母
而這三類的排序這是根據 bucketindex(不同國家人爲規定的一個index值)來決定
mNumberBucketIndex = mAlphabeticIndexBucketCount - 1;
if (bucket >= mNumberBucketIndex) {
return bucket + 1;
這樣就把 含有number的index小於字母的index了
這樣就是 -1 < number < number+1 。
想調整三者的順序只需修改index的值
而對於含有中文的排序 使用hanzitopinyin的工具類進行轉化就行了,個個公司可能這個類可能都不一樣,不說了。
2 號碼匹配
對於號碼的搜索也順便總結下:
號碼的匹配是從後面開始向前匹配,直到達到指定的限制:在
PhoneNumberUtil.tocallIdMinMatch()裏面實現。
要想實現這個功能,需要 數據庫 保存該字段 這個在contactsprovider裏實現,具體在 datarowHandlerForPhoneNumber詳細實現
然後其他contentresoler 在查詢的時候要將該條件加進去 比如:mms 裏面的contact的getcontactinfoforphonenumber方法 就實現了該查詢:
另外contacts數據庫自己也實現了一些包含該字段的查詢方法:在ContactsDatabase裏面
除了方便查詢外,還有更新數據版本的時候爲沒有該字段需要插入該字段的數據庫版本實現更新。
3 搜索
contactprovider實現搜索出了基本實現模糊查詢外,還提供了 一個專供多表搜索的uri 叫啥來着 忘了。反正也沒啥好主意的。忘就忘了,說明不值得記憶