当前位置:首页 » 安卓系统 » 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来判断字符串的首字符是否为英文字符,如果是,则将首字母画上去

热点内容
上网提示找不到服务器的ip地址 发布:2024-05-01 18:12:01 浏览:168
正版我的世界怎么开一个服务器 发布:2024-05-01 18:11:50 浏览:737
七日杀服务器被封ip怎么办 发布:2024-05-01 18:01:57 浏览:234
c语言的双引号 发布:2024-05-01 17:52:39 浏览:448
我的世界服务器开服包 发布:2024-05-01 17:18:30 浏览:900
收费下载站源码 发布:2024-05-01 16:49:01 浏览:975
压缩下载啥 发布:2024-05-01 16:42:32 浏览:725
安卓手机预装系统软件放在哪里的 发布:2024-05-01 16:37:41 浏览:837
南京java培训机构 发布:2024-05-01 16:33:34 浏览:366
存储系统的ppt 发布:2024-05-01 16:33:22 浏览:192