获取手机联系人的方法,返回联系人列表(LinkManItem为联系人javaBean)
public static ArrayList<LinkManItem> getMobileLinkManList(Context context) {
ArrayList<LinkManItem> linkManList = new ArrayList<LinkManItem>();
// 查找联系人数据,ContactsContract.Contacts.CONTENT_URI管理联系人的Uri
Cursor cursor = context.getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
while (cursor.moveToNext()) {
LinkManItem bean = new LinkManItem();
// 获取联系人ID
String contactId = cursor.getString(cursor
.getColumnIndex(ContactsContract.Contacts._ID));
// 获取联系人的名字
String name = cursor.getString(cursor
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
bean.setName(name);// 设置联系人姓名
try {
bean.setFirstWord(cutString(getPinYin(name)));
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
// 获取联系人的电话
Cursor phones = context.getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = "
+ contactId, null, null);
while (phones.moveToNext()) {
String phoneNumber = phones
.getString(phones
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
// 先只获取一个号码,bean中只设一个号码变量,也可获取多个
bean.setPhoneNumber(phoneNumber);
// 设置默认图片
bean.setImage(R.drawable.ic_launcher);
break;
}
linkManList.add(bean);
}
cursor.close();//需要关闭,否则会出错
return linkManList;
}
对某类型的列表进行排序的方法
/**(LinkManItem代表一种类型,ENGLISH是按字母来排,可设置其他许多排序方式)
* 对字母排序
* @author Administrator
*
*/
public static class SortByName implements Comparator<LinkManItem>
{
private Comparator<Object> cpt = Collator.getInstance(java.util.Locale.ENGLISH);
@Override
public int compare(LinkManItem o1, LinkManItem o2)
{
return cpt.compare(o1.getFirstWord(), o2.getFirstWord());
}
}
//获得按首字母排好序的方法
public static ArrayList<LinkManItem> sortByAlpha(
ArrayList<LinkManItem> uList) {
Collections.sort(uList, new SortByName());
return uList;
}
/**
* 将一个中文字符串转换称拼音(需要导入pinyin4j这个包,这个暂时不知道怎么上传,自行下载)
*
* @param 中文字符串
* @return
*/
public static String getPinYin(String zhongwen)
throws BadHanyuPinyinOutputFormatCombination {
String zhongWenPinYin = "";
char[] chars = zhongwen.toCharArray();
for (int i = 0; i < chars.length; i++) {
String[] pinYin = PinyinHelper.toHanyuPinyinStringArray(chars[i],
getDefaultOutputFormat());
// 如果为空时,返回自己
if (pinYin != null) {
zhongWenPinYin += pinYin[0];
} else {
zhongWenPinYin += chars[i];
}
}
return zhongWenPinYin;
}
/**
* 转换格式
*
* @return
*/
private static HanyuPinyinOutputFormat getDefaultOutputFormat() {
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
format.setCaseType(HanyuPinyinCaseType.UPPERCASE);// 大写
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);//
format.setVCharType(HanyuPinyinVCharType.WITH_U_AND_COLON);//
return format;
}
(第一篇博客,效果不是很好,不过方法经过测试可用)