android 读取本地通讯录外加搜索功能

来源:互联网 发布:机构持仓数据查询 编辑:程序博客网 时间:2024/05/01 13:01

一 添加权限

<uses-permission android:name="android.permission.READ_CONTACTS"/>  

<uses-permission android:name="android.permission.CALL_PHONE"/> 


二 读取联系人关键代码

 private static final String[] PHONES_PROJECTION = new String[] {
        Phone.DISPLAY_NAME, Phone.NUMBER, Photo.PHOTO_ID,Phone.CONTACT_ID };

private Cursor getContacts(){
ContentResolver resolver = context.getContentResolver();
Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,PHONES_PROJECTION, null, null, null);
return phoneCursor;
}


public class FriendBean {

private String name;

private String number;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}

}

private void initFriendsList() {
List <FeriendBean>friendBeanlist = new ArrayList<FriendBean>();
Cursor cursor = getContacts();
while(cursor.moveToNext()){
FriendBean fb = new FriendBean();
fb.setName(cursor.getString(cursor.getColumnIndex(Phone.DISPLAY_NAME)));
fb.setNumber(cursor.getString(cursor.getColumnIndex(Phone.NUMBER)));
friendBeanlist.add(fb);
}

}


现在已经把所有联系人添加到了列表


下面实现搜索(支持联系人 和手机号搜索)

private List<FriendBean> searchConstantsByWords(String words){

if(words == null || "".equals(words)){
return friendBeanlist;
}

List<FriendBean> result = new ArrayList<FriendBean>();
for(FriendBean fb:friendBeanlist){
String name = fb.getName();
String number = fb.getNumber();
String firstStr = getFirst(name);
if(name.toLowerCase().contains(words.toLowerCase()) || number.contains(words) || firstStr.contains(words.toLowerCase())){
result.add(fb);
}
}
return result;
}


public static String getFirst(String str) {
String result = "";
for (int j = 0; j < str.length(); j++) {
char word = str.charAt(j);

                      // 需要jar包在附件里下载
String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);


if (pinyinArray != null) {
result += pinyinArray[0].charAt(0);
} else {
result += word;
}
}
return result;
}