當前位置:首頁 » 安卓系統 » android聯系人字母

android聯系人字母

發布時間: 2022-06-09 03:25:02

『壹』 android手機聯系人排序、快速查找問題

安裝最新的來電通試試看吧,有自家的撥打界面和聯系人,打拚音可以快速找到要找的聯系人

『貳』 手機里的聯系人軟體英文字母叫什麼

Contactor(聯系人)應該是這個的

『叄』 安卓或者華為手機常用聯系人的排序規則是如何規定的

常用聯系人是根據第一個字的字母排序的,你可以在想要經常的聯系人姓名前加一個a,就到最上面了

『肆』 如何讓聯系人頭像顯示聯系人姓名的第一個漢字

在android 4.4.3上面,聯系人的頭像默認顯示首字母,但是不支持中文字元 如果聯系人名字的第一位是英文字元(a-z "| A-Z),則默認頭像將顯示該首字母。
如果支持中文時顯示第一個漢字,那就happy了。

『伍』 安卓手機系統語言設置成英文之後,通訊錄裡面就無法安裝字母查找了 這是為什麼

安卓手機系統語言設置成英文之後,通訊錄裡面就無法按照字母查找了的原因是有二:
第一,按照字母查找遵循的是漢語拼音的拼寫規則,而英文系統下的通訊錄,遵循的是英語語法的拼寫規則。
例如,中文胡天龍,漢語拼音是hu tianlong,變成英文後,系統內出現的漢字是亂碼,根本無從查找。
第二,某些安卓系統手機的操作系統版本偏低,語言設置變成英文後,不再支持按照字母查找的功能。5.0以上的安卓操作系統(國內銷售手機),即使從語言設置變成了中文,也是可以繼續使用按字母查找功能的(實測機型為紅米Note2)。

『陸』 如何獲取android手機聯系人並按字母展示

android提供了本地資料庫的查詢uri,可以查詢出數據:
採用一個AsyncQueryHandler來進行查詢, AsyncQueryHandler自己開啟了線程來進行數據查詢,很方便

protected AsyncQueryHandler mQueryHandler;

protected final void queryPersonal() {
mQueryHandler.startQuery(QUERY_TOKEN, null, ContactsContract.Contacts.CONTENT_URI,
Personal.CONTACTS_SUMMARY_PROJECTION, null, null, getSortOrder(ContactsContract.Contacts.DISPLAY_NAME));
}

protected static String getSortOrder(String fieldName) {
//substr為截取函數,取第一個字母
//COLLATE主要用於對字元進行排
//COLLATE LOCALIZED 按本地語言進行排序
return "CASE WHEN substr(UPPER(" + fieldName + "), 1, 1) BETWEEN 'A' AND 'Z' THEN 1 else 10 END," +
fieldName + " COLLATE LOCALIZED ASC";
}

protected final class MyHandler extends AsyncQueryHandler {
/**
* Asynchronous query handler constructor.
*/
public MyHandler(Context context) {
super(context.getContentResolver());
}

/**
* On query completion.
*/
@Override
protected void onQueryComplete(int token, Object cookie, Cursor cursor) { //handler查詢完的回調
if (cursor == null || cursor.isClosed()) {
return;
}
if (!isFinishing()) {
setLoading(false);
if (mAdapter != null) {
mAdapter.setLoading(false);
mAdapter.changeCursor(cursor);
}

if (cursor.getCount() == 0) {
mEmtytext.setVisibility(View.VISIBLE);
} else {
mEmtytext.setVisibility(View.INVISIBLE);
}
} else {
if (cursor != null && !cursor.isClosed()) {
cursor.close();
}
}
}

『柒』 求android讀取通訊錄並按字母排序demo

如果只是排序,很簡單。採用java自帶的Collections.sort(***,***)方法。代碼可以這樣寫:
List list =new ArrayList();
//Test是你的聯系人實體。假設聯系人的姓名是name,並且實體里有個方法getName(),返回的是聯系人的名字
//然後對list賦值
Collections.sort(list,new Comparator(){
@Override
public int compare(Test lhs, Test rhs){
return (lhs.getName().compateTo(rhs.getName())); //這個是升序。把此行lhs和rhs互換,就是降序了。
}
}

『捌』 android聯系人排序用了什麼演算法

今天用了整整一下午去搗鼓這塊,為什麼模擬器上可以按拼音排序,中英文混排,及按字母搜索聯系人,但到了開發板(平台是根據android2.2改過的)上就怎麼不行了呢,雖然現在還沒有解決,但也是知道了問題所在,離解決之路也就不遠了
好吧,現在就解釋下android2.2是怎麼按拼音排序的。

首先我們來看下android.2自帶通訊錄的資料庫文件contacts2.db的raw_contacts表。用sqlitedbviewer工具打開後可以看到有這么一個欄位:sort_key(sort_key_alt與之相似,只不過是英文環境下有個按given name還是first name排序的問題)。

正常狀況下,我們新建一個聯系人的話,如果是英文,則sort_key與display_name欄位顯示相同,如果輸入姓名是中文,如「你好」,sort_key則會顯示「ni 你 hao 好」,這樣開發者既可以根據此欄位按拼音排序,中英文混排,以及按拼音搜索聯系人拉。

現在就說下,android是如何將中文名的聯系人轉化為拼音存到sort_key裡面的:

view plain to clipboardprint?
if (displayNameStyle == FullNameStyle.CHINESE ||
displayNameStyle == FullNameStyle.CJK) {
sortKeyPrimary = sortKeyAlternative =
ContactLocaleUtils.getIntanc).getSortKe(displayNamePrimary, displayNameStyle);}
if (displayNameStyle == FullNameStyle.CHINESE ||
displayNameStyle == FullNameStyle.CJK) { sortKeyPrimary =
sortKeyAlternative =
ContactLocaleUtils.getIntanc).getSortKe(displayNamePrimary,
displayNameStyle);}
這段代碼是運行在contactsprovi2.Java的updateRawContactDisplayName()方法裡面,這段代碼我們用到了ContactLocaleUtils.java這個類,所以我們進入它以後最顯眼的就是ChineseContactUtils這個ContactLocaleUtils的子類,它重寫了ContactLocaleUtils的getSortKey()方法,如下:

view plain to clipboardprint?
public String getSortKey(String displayName) {

ArrayList tokens = HanziToPinyin.getInstance().get(displayName);

if (tokens != null && tokens.size() > 0) {

StringBuilder sb = new StringBuilder();

for (Token token : tokens) {

// Put Chinese character's pinyin, then proceed with the

// character itself.

if (Token.PINYIN == token.type) {

if (sb.length() > 0) {

sb.append(' ');

}

sb.append(token.target);

sb.append(' ');

sb.append(token.source);

} else {

if (sb.length() > 0) {

sb.append(' ');

}

sb.append(token.source);

}

}

return sb.toString();

}

return super.getSortKey(displayName);

}
public
String getSortKey(String displayName) {
ArrayList tokens =
HanziToPinyin.getInstance().get(displayName); if (tokens !=
null && tokens.size() > 0) { StringBuilder
sb = new StringBuilder(); for (Token token : tokens) {
// Put Chinese character's pinyin, then proceed
with the // character itself.
if (Token.PINYIN == token.type) { if
(sb.length() > 0) { sb.append(' ');
} sb.append(token.target);
sb.append(' ');
sb.append(token.source); } else {
if (sb.length() > 0) {
sb.append(' '); }
sb.append(token.source); } }
return sb.toString(); } return
super.getSortKey(displayName); }
首先我們看 ArrayList tokens = HanziToPinyin.getInstance().get(displayName);,因為其他的無非就是插入格式的問題,我們暫時不用看。

android如何將漢字轉為拼音的?這就用到了HanziToPinyin這個類,好吧,我們先看下HanziToPinyin的getInstance()方法:

view plain to clipboardprint?
public static HanziToPinyin getInstance() {

synchronized(HanziToPinyin.class) {

if (sInstance != null) {

return sInstance;

}

// Check if zh_CN collation data is available

final Locale locale[] = Collator.getAvailableLocales();

for (int i = 0; i < locale.length; i++) {

if (locale[i].equals(Locale.CHINA)) {

sInstance = new HanziToPinyin(true);

return sInstance;

}

}

Log.w(TAG, "There is no Chinese collator, HanziToPinyin is disabled");

sInstance = new HanziToPinyin(false);

return sInstance;

}

}
public static HanziToPinyin getInstance() {
synchronized(HanziToPinyin.class) { if (sInstance != null) {
return sInstance; } // Check
if zh_CN collation data is available final Locale locale[]
= Collator.getAvailableLocales(); for (int i = 0; i <
locale.length; i++) { if
(locale[i].equals(Locale.CHINA)) { sInstance = new
HanziToPinyin(true); return sInstance;
} } Log.w(TAG, "There is no Chinese
collator, HanziToPinyin is disabled"); sInstance = new
HanziToPinyin(false); return sInstance; } }
現在說下我的開發板為什麼不能轉拼音;就是因為final Locale locale[] = Collator.getAvailableLocales()的Locale沒有一項equals(Locale.CHINA),所以到時候解決了這項,聯系人的按拼音排序也就解決了,如果大家不想用系統自帶的,自己可以下載個pinyin4j.jar包自己實現吧。

好吧,繼續:

看方法名也只到,這個方法返回一個HanziToPinyin實例,我仔細研究了HanziToPinyin的構造方法,無論純如的布爾值是false還是true都不影響,返回的都一樣,只不過這個方法的Log.w(TAG, "There is no Chinese collator, HanziToPinyin is disabled");可以提示是否支持漢字轉拼音,如果不能,android就會將displayname原封不動的插入sort_key裡面,如果能,就是剛才我說的 如「你好」,sort_key則會顯示「ni 你 hao 好」,這種形式,具體的如何轉拼音就是get()方法拉,直接插代碼:

view plain to clipboardprint?
public ArrayList get(final String input) {
ArrayList tokens = new ArrayList();
if (!mHasChinaCollator || TextUtils.isEmpty(input)) {
// return empty tokens.
return tokens;
}
final int inputLength = input.length();
final StringBuilder sb = new StringBuilder();
int tokenType = Token.LATIN;
// Go through the input, create a new token when
// a. Token type changed
// b. Get the Pinyin of current charater.
// c. current character is space.
for (int i = 0; i < inputLength; i++) {
final char character = input.charAt(i);
if (character == ' ') {
if (sb.length() > 0) {
addToken(sb, tokens, tokenType);
}
} else if (character < 256) {
if (tokenType != Token.LATIN && sb.length() > 0) {
addToken(sb, tokens, tokenType);
}
tokenType = Token.LATIN;
sb.append(character);
} else if (character < FIRST_UNIHAN) {
if (tokenType != Token.UNKNOWN && sb.length() > 0) {
addToken(sb, tokens, tokenType);
}
tokenType = Token.UNKNOWN;
sb.append(character);
} else {
Token t = getToken(character);
if (t.type == Token.PINYIN) {
if (sb.length() > 0) {
addToken(sb, tokens, tokenType);
}
tokens.add(t);
tokenType = Token.PINYIN;
} else {
if (tokenType != t.type && sb.length() > 0) {
addToken(sb, tokens, tokenType);
}
tokenType = t.type;
sb.append(character);
}
}
}
if (sb.length() > 0) {
addToken(sb, tokens, tokenType);
}
return tokens;
}

『玖』 Android 聯系人資料庫介紹以及對聯系人的基本操作

一、 聯系人資料庫  聯系人的資料庫文件的位置 /data/data/com.Android.providers.contacts/databases.contacts2.db  資料庫中重要的幾張表 1、contacts表 該表保存了所有的手機測聯系人,每個聯系人佔一行,該表保存了聯系人的 ContactID、聯系次數、最後一次聯系的時間、是否含有號碼、是否被添加 到收藏夾等信息。 2、raw_contacts表 該表保存了所有創建過的手機測聯系人,每個聯系人佔一行,表裡有一列標 識該聯系人是否被刪除,該表保存了兩個ID:RawContactID和ContactID, 從而將contacts表和raw_contacts表聯系起來。該表保存了聯系人的 RawContactID、ContactID、聯系次數、最後一次聯系的時間、是否被添 加到收藏夾、顯示的名字、用於排序的漢語拼音等信息。 3、 mimetypes 該表定義了所有的MimeTypeID,即聯系人的各個欄位的唯一標志。 4、data表  該表保存了所有創建過的手機測聯系人的所有信息,每個欄位佔一行 ,該表 保存了兩個ID:MimeTypeID和RawContactID,從而將data表和 raw_contacts表聯系起來。  聯系人的所有信息保存在列data1至data15中,各列中保存的內容根據 MimeTypeID的不同而不同。如保存號碼(MimeTypeID=5)的那行數據中, data1列保存號碼,data2列保存號碼類型(手機號碼/家庭號碼/工作號碼等)。 二、對聯系人的基本操作  這里的基本操作只是針對手機測的聯系人,(U)SIM側的聯系人的操 作後續介紹。  如果對聯系人的基本操作,我們必須得到許可。 方法就是在AndroidManifest.xml文件中配置如下許可權: <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" />

『拾』 android 聯系人頭像取首漢子的首字母怎麼做

在android 4.4.3上面,聯系人的頭像默認顯示首字母,但是不支持中文字元

如果聯系人名字的第一位是英文字元(a-z "| A-Z),則默認頭像將顯示該首字母。
如果支持中文時顯示第一個漢字,那就happy了。
那就看看如何通過修改源代碼來實現這一小功能吧~
我們還是先了解下聯系人頭像載入的流程吧~
聯系人頭像載入這個問題還是很有意思的,在Contacts中使用ContactPhotoManager類(嚴格來講是這個類的子類)來實現頭像的非同步載入。
這個類還使用了LruCache來緩存圖片,相當的強大,對圖像的非同步載入和緩存有興趣的同志們可以看看。
以主頁面的聯系人列表載入頭像為例。大致的調用流程為(只針對沒有設置頭像的聯系人,即photoUri是null):
DefaultContactListAdapter->bindView()
ContactEntryListAdapter->buildQuickContact()
ContactEntryListAdapter->()
ContactPhotoManagerImpl->loadPhoto()->provider: // 注意,使用的是DEFAULT_AVATAR對象
->applyDefaultImage()
->getDefaultImageForContact()
LetterTileDrawable->drawLetterTile()->firsr char:高
在drawLetterTile函數執行drawText之前會調用isEnglishLetter來判斷字元串的首字元是否為英文字元,如果是,則將首字母畫上去

熱點內容
php寫入一行 發布:2024-04-18 17:57:01 瀏覽:860
控制網加密 發布:2024-04-18 17:36:49 瀏覽:124
android拍照源碼 發布:2024-04-18 17:18:49 瀏覽:412
go臨時存儲 發布:2024-04-18 17:12:11 瀏覽:406
python郵件正文 發布:2024-04-18 16:45:22 瀏覽:804
phpopcache 發布:2024-04-18 16:24:20 瀏覽:129
安卓手機的歌怎麼弄到蘋果 發布:2024-04-18 16:23:39 瀏覽:15
安卓抖音購物車在哪裡 發布:2024-04-18 16:23:29 瀏覽:672
安卓手機用劉海屏和挖孔屏哪個好 發布:2024-04-18 16:12:51 瀏覽:467
孩子學編程多少錢 發布:2024-04-18 16:04:59 瀏覽:129