<uses-permission android:name="android.permission.READ_CONTACTS"/>
ContactInfo类(Bean)
package com.saiermeng.readcontacts.domain;
public class ContactInfo {
private String name;
private String phone;
private String email;
private String qq;
@Override
public String toString() {
return "ContactInfo [name=" + name + ", phone=" + phone + ", email="
+ email + ", qq=" + qq + "]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getQq() {
return qq;
}
public void setQq(String qq) {
this.qq = qq;
}
}
工具类(ContactInfoUtils.java)
package com.saiermeng.readcontacts.utils;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import com.saiermeng.readcontacts.domain.ContactInfo;
public class ContactInfoUtils {
/**
* 获取系统里面的全部的联系人信息
*
* @param context
* 上下文
* @return
*/
public static List<ContactInfo> getAllContactInfos(Context context) {
// 1. 查询raw_contacts表, 把每个联系人的contact_id.
ContentResolver resolver = context.getContentResolver();
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
Cursor cursor = resolver.query(uri, new String[] { "contact_id" },
null, null, null);
// 创建一个集合,存放所有的联系人信息
List<ContactInfo> contactInfos = new ArrayList<ContactInfo>();
while (cursor.moveToNext()) {
String id = cursor.getString(0);
System.out.println("联系人id:" + id);
if (id != null) {
ContactInfo contactInfo = new ContactInfo();
// 2. 根据contact_id 查询data表,把联系人的数据取出来.
Uri dataUri = Uri.parse("content://com.android.contacts/data");
Cursor dataCursor = resolver.query(dataUri, new String[] {
"data1", "mimetype" }, "raw_contact_id=?",
new String[] { id }, null);
while (dataCursor.moveToNext()) {
String data1 = dataCursor.getString(0);
String mimetype = dataCursor.getString(1);
if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) {
contactInfo.setPhone(data1);
} else if ("vnd.android.cursor.item/email_v2"
.equals(mimetype)) {
contactInfo.setEmail(data1);
} else if ("vnd.android.cursor.item/name".equals(mimetype)) {
contactInfo.setName(data1);
} else if ("vnd.android.cursor.item/im".equals(mimetype)) {
contactInfo.setQq(data1);
}
}
contactInfos.add(contactInfo);
dataCursor.close();
}
}
cursor.close();
return contactInfos;
}
}
主窗体的点击事件(MainActivity.java)
package com.saiermeng.readcontacts;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import com.saiermeng.readcontacts.domain.ContactInfo;
import com.saiermeng.readcontacts.utils.ContactInfoUtils;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/**
* 把联系人信息给读取出来
* @param view
*/
public void readContactInfos(View view){
List<ContactInfo> infos = ContactInfoUtils.getAllContactInfos(this);
for(ContactInfo info:infos){
System.out.println(info.toString());
}
}
}