如果妳了解聯系人,妳會知道每個聯系人都有壹個sort_key字段。如果查詢中沒有設置sortOrder,默認情況下將使用sort_key字段作為排序依據。其實姓名檢索也是按照sort_key來做的(比如dial的模糊匹配:數字轉換成字母,再轉換成拼音,最後得到漢字)。Sort_key根據姓名生成:如果聯系人姓名包含字母,sort_key和姓名壹致;如果名字是漢字,生成的sort_key,拼音-漢字-拼音-漢字。。。其中拼音全部大寫,用空格隔開,如“張三”——sort _ key:“張三三”。
名稱改變時,在packages/providers/Contacts provider/src/com/Android/providers/Contacts/Contacts provider 2 . Java中生成Sort_key,具體調用如下:
【java】?查看plaincopyprint?
如果?(displayNameStyle?==?FullNameStyle。中國人?||
displayNameStyle?==?FullNameStyle。CJK)?{
sortKeyPrimary?=?sortKeyAlternative?=
ContactLocaleUtils.getIntance()。getSortKey(
displayNamePrimary,?displayname style);
}
調用packages \ providers \ contacts provider \ src \ com \ Android \ providers \ contacts \ contactlocaleutils.java中的ChineseContactUtils.getSortKey()方法,具體實現如下:
【java】?查看plaincopyprint?
contactlocaleutils . getint ance();
獲取實例,然後調用:
【java】?查看plaincopyprint?
1.public?字符串?getSortKey(String?顯示名稱,int?nameStyle)?{
回歸?getForSort(integer . value of(name style))。get sort key(display name);
}
2.?@覆蓋
公共?字符串?getSortKey(String?displayName)?{
ArrayList & ltToken & gt?代幣?=?HanziToPinyin.getInstance()。get(顯示名稱);
如果?(代幣?!=?null?& amp& amp?tokens.size()?& gt?0)?{
StringBuilder?sb?=?新的?StringBuilder();
為了什麽?(Token?token?:?代幣)?{
//?放?中國人?人物的?拼音,?然後呢?繼續嗎?用什麽?這
//?人品?本身。
如果?(Token。拼音?==?token.type)?{
如果?(sb.length()?& gt?0)?{
某人追加('?'));
}
sb追加(token . target);
某人追加('?'));
sb . append(token . source);
}?不然呢?{
如果?(sb.length()?& gt?0)?{
某人追加('?'));
}
sb . append(token . source);
}
}
回歸?sb . tostring();
}
回歸?super . get sort key(display name);
}
上面調用了FrameWorks/base/core/Java/com/Android/internal/util/hanzitopinyin . Java(下面附上源代碼)中的方法,得到了拼音。當然轉換需要本地支持,但是只要獲取這個文件就可以在這裏完成漢字到拼音的轉換。從路徑可以看出,HanziToPinyin.java是內部類,不能直接調用,但是妳可以把這個文件拿出來放到自己的項目中直接使用。調用也很簡單方便,上面基本都給了。看看HanziToPinyin的源代碼就更清楚了。下面是我寫的壹個調用:輸入漢字,返回拼音,字母原樣返回,全部轉換成小寫(默認得到的拼音全是大寫)。
【java】?查看plaincopyprint?
包裹?com . spare . pinyin;
進口?Java . util . ArrayList;
進口?com . spare . pinyin . hanzitopinin . token;
公共?班級?拼音?{
//漢字返回拼音,字母原樣返回,全部轉換成小寫(默認得到的拼音全部大寫)。
公共?靜電?字符串?getPinYin(字符串?輸入)?{
ArrayList & ltToken & gt?代幣?=?HanziToPinyin.getInstance()。get(輸入);
StringBuilder?sb?=?新的?StringBuilder();
如果?(代幣?!=?null?& amp& amp?tokens.size()?& gt?0)?{
為了什麽?(Token?token?:?代幣)?{
如果?(Token。拼音?==?token.type)?{
sb追加(token . target);
}?不然呢?{
sb . append(token . source);
}
}
}
回歸?某人很緊張。toLowerCase();
}
}