android3种方式查询手机通讯录联系人

时间:2022-04-04 19:00:17

3种方式查询手机通讯录联系人

本文是提供了3种方式查询通讯录,获取手机通讯录中所有联系人的ID和联系人姓名。

  • 通过ContentResolver类的query方法,这种方法在主线程中查询数据,query方法返回数据库的游标Cursor,需要自己去手动关闭。
  • 通过Activity类的managedQuery方法,这种方法查询同样是在主线程中,但是不需要手动关闭Cursor,因为Activity类销毁时再onDestroy方法中会去关闭。
  • 通过Android提供的异步查询框架AsyncQueryHandler,这个类是一个抽象类,提供异步查询,当查询完毕后,会调用onQueryComplete方法,该方法参数cursor是查询系统数据库完成后获得的游标。

实例代码1

通过ContentResolver类的query方式查询,例如:

@获取手机通讯录联系人ID和NAME
protected void getAllContacts() {
ContentResolver cr = this.getContentResolver();
Cursor cursor = cr.query(
ContactsContract.Contacts.CONTENT_URI, null, null, null,
ContactsContract.Contacts._ID + " DESC");
while(cursor.moveToNext()) {
System.out.println(cursor.getString(
cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID)));
System.out.println(cursor.getString(
cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
}
cursor.close();
}

实例代码2

通过Activity类的managedQuery方法

@获取手机通讯录联系人ID和NAME
private void getContacts(){
Cursor cursor = managedQuery(ContactsContract.Contacts.CONTENT_URI,
null,
null,
null,
null);
while (cursor.moveToNext()) {
System.out.println(
cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID)));
System.out.println(
cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
}
}

实例代码3

通过AsyncQueryHandler

@获取手机通讯录联系人ID和NAME
private void getContactsAsync(){

MyQueryHandler qh = new MyQueryHandler(getContentResolver());
qh.startQuery(0, null, ContactsContract.Contacts.CONTENT_URI,
null,
null,
null,
null);
}
@自定义一个异步查询类,继承AsyncQueryHandler类
class MyQueryHandler extends AsyncQueryHandler{

public MyQueryHandler(ContentResolver cr) {
super(cr);
}

@Override
protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
super.onQueryComplete(token, cookie, cursor);
while(cursor.moveToNext()){
System.out.println(cursor.getString(
cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID)));
System.out.println(cursor.getString(
cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
}
cursor.close();
}


}