获取手机联系人的两种方法

第一种方法比较简单 就几句话 但是获取的信息不完善

第二种方法比较难 代码比较多 获取的信息全

须要加的权限 :

import java.util.ArrayList;

import java.util.List;

import android.app.Activity;

import android.content.ContentResolver;

import android.database.Cursor;

import android.net.Uri;

import android.os.Bundle;

import android.provider.ContactsContract;

import android.view.View;

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

public void btnReadContacts(View v){

//StringBuffer sb = readContact();

List contacts = readContact();

System.out.println("联系人信息 : "+contacts.toString());

}

//读取联系人记得加权限

public void btnOtherReadContacts(View v){

//内容提供者的解析器对象

ContentResolver resolver = getContentResolver();

//这个循环的是data表

Cursor cursor = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);

StringBuffer sb = new StringBuffer();

while(cursor.moveToNext()){

String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));

String phone = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

sb.append("姓名 : "+name+" 电话 : "+phone);

}

System.out.println("--- : "+sb.toString());

}

/**

* 读取系统联系人

* @return 返回所有联系人的信息

*/

private List readContact() {

//获取一个内容提供者解析器对象 看作一个手机

ContentResolver resolver = getContentResolver();

//这个就是查询raw_contacts

Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");

//这个是查询的data表

Uri dataUri = Uri.parse("content://com.android.contacts/data");

//select * from raw_contacts;

Cursor rawCursor = resolver.query(uri, null, null, null, null);

//创建一个存放联系人的容器

//StringBuffer sb = new StringBuffer();

List contactsList = new ArrayList();

while(rawCursor.moveToNext()){

Contacts contacts = new Contacts();

//得到联系人的id

int id = rawCursor.getInt(rawCursor.getColumnIndex("contact_id"));

//select * from data where raw_contact_id = id?

Cursor dataCursor = resolver.query(dataUri, null, "raw_contact_id = ?", new String[]{id+""}, null);

//得到指定表所返回的列名

/*String[] names = dataCursor.getColumnNames();

for (int i = 0; i < names.length; i++) {

System.out.println("列名 -> "+names[i]);

}*/

while(dataCursor.moveToNext()){

//获取联系人的数据 电话、邮箱

String content = dataCursor.getString(dataCursor.getColumnIndex("data1"));

String mimetype = dataCursor.getString(dataCursor.getColumnIndex("mimetype"));

//用于判断数据到底是一个什么类型的数据

if("vnd.android.cursor.item/phone_v2".equals(mimetype)){

//sb.append("电话 : "+content);

contacts.setPhone(content);

}else if("vnd.android.cursor.item/email_v2".equals(mimetype)){

//sb.append("邮箱 : "+content);

contacts.setEmial(content);

}else if("vnd.android.cursor.item/name".equals(mimetype)){

//sb.append("姓名 : "+content+"\n");

contacts.setName(content);

}

}

contactsList.add(contacts);

}

return contactsList;

}

}