android获取手机联系人并且按字母进行排序

 

获取手机联系人的方法,返回联系人列表(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;
 }

 

 

(第一篇博客,效果不是很好,不过方法经过测试可用)

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值