关于手机联系人的中文字母排序问题

本文探讨了手机联系人排序的问题,特别是在处理中文姓名时的挑战。内容包括通过`sort_key`字段获取和排序联系人数据,特别提到小米机型的特殊情况,需要手动将中文转换为拼音进行排序。此外,提供了相应的代码片段来展示如何实现这一过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在不管是手机自带的通讯录还是一些app的通讯录都有联系人,里面的联系人大多数都是一些a-z的名称来进行排序的。还有开发者没有研究过类似的问题不知道如何来解决这个问题。那么下面我来说下 。通过查找系统的联系人数据,来获得数据,需要注意里面的一个字段sort_key,这个字段里面存着联系人的名称和转换过来的英文字母。例如,ZHANG张GUO果FENG凤。

private List<ContactInfo> getInfors() {
ContentResolver resolver = getActivity().getContentResolver();
String[] projection = { Phone.CONTACT_ID, "sort_key",
Phone.DISPLAY_NAME, Phone.NUMBER, Phone.PHOTO_ID };
Cursor cur = resolver.query(Phone.CONTENT_URI, projection, null, null,
" sort_key COLLATE LOCALIZED ASC");
// ArrayList<ContactInfo> phones = new ArrayList<ContactInfo>();
ArrayList<ContactInfo> contactList = null;
// LogUtil.info(ContactsActivity.class, "getInfors start");
cur.moveToNext();
while (cur.getCount() > cur.getPosition()) {
ContactInfo contactInfo = new ContactInfo();
List<String> phone = new ArrayList<String>();
String number = cur.getString(cur.getColumnIndex(Phone.NUMBER));
number = number.replaceAll("-", "");
number = number.replaceAll(" ", "");
String contactID = cur.getString(cur
.getColumnIndex(Phone.CONTACT_ID));
String name = cur.getString(cur.getColumnIndex(Phone.DISPLAY_NAME));
String photo_id = cur.getString(cur.getColumnIndex(Phone.PHOTO_ID));
String sort_key = cur.getString(cur.getColumnIndex("sort_key"));
contactInfo.setContractID(contactID);
// 名字不存在的时候,把电话号码当做名字显示
if (!TextUtils.isEmpty(name)) {
contactInfo.setName(name);
} else {
contactInfo.setName(number);
}
contactInfo.setPhotoId(photo_id);
contactInfo.setSortKey(sort_key);
if (number.startsWith("+86")) {
number = number.substring(3, number.length());
}
phone.add(number);
contactInfo.setPhone(phone);
contactInfo.setFormattedNumber((name + ""));
if (contactList == null) {
contactList = new ArrayList<ContactInfo>();
}
contactList.add(contactInfo);
cur.moveToNext();
}
return contactList;
}

经测试一般的机型返回的数据都是有英文字母和中文字幕混合的,这样的话我们可以进行排序。然而,这里要说的就是小米机型,它返回的数据是没有英文的需要只有中文,例如,搞运维只会返回搞运维。所以这个时候就需要我们手动去转换了,这个包里面的方法会将中文转换成拼音。


我们获得了数据info创建一个和他同等大小的数组。通过调用回调接口来转换它的值,对比它的编码来进行排序。contactInfo和contactlist一样是存储联系人的list集合。



其实挺简单的,把需要的jar和类上传了 ,不明白可以联系我。等有时间做一个简单的demo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值