最近尝试了一下拉取手机通讯录中所有联系人的姓名,手机号码,地址,公司,邮箱等信息,在此做点小笔记,有需要的时候可以直接拿过来用,好了下面看看代码吧:
public void testGetAllContact() throws Throwable
{
//获取联系人信息的Uri
Uri uri = ContactsContract.Contacts.CONTENT_URI;
//获取ContentResolver
ContentResolver contentResolver = ContactListActivity.this.getContentResolver();
//查询数据,返回Cursor
Cursor cursor = contentResolver.query(uri, null, null, null, null);
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
while(cursor.moveToNext())
{
Map<String,Object> map = new HashMap<String,Object>();
StringBuilder sb = new StringBuilder();
//获取联系人的ID
String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
//获取联系人的姓名
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
//构造联系人信息
sb.append("contactId=").append(contactId).append(",Name=").append(name);
map.put("name", name);
String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));//联系人ID
//查询电话类型的数据操作
Cursor phones = contentResolver.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));
//添加Phone的信息
sb.append(",Phone=").append(phoneNumber);
map.put("mobile", phoneNumber);
}
phones.close();
//查询Email类型的数据操作
Cursor emails = contentResolver.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId,
null, null);
while (emails.moveToNext())
{
String emailAddress = emails.getString(emails.getColumnIndex(
ContactsContract.CommonDataKinds.Email.DATA));
//添加Email的信息
sb.append(",Email=").append(emailAddress);
Log.e("emailAddress", emailAddress);
map.put("email", emailAddress);
}
emails.close();
//Log.i("=========ddddddddddd=====", sb.toString());
//查询==地址==类型的数据操作.StructuredPostal.TYPE_WORK
Cursor address = contentResolver.query(ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID + " = " + contactId,
null, null);
while (address.moveToNext())
{
String workAddress = address.getString(address.getColumnIndex(
ContactsContract.CommonDataKinds.StructuredPostal.DATA));
//添加Email的信息
sb.append(",address").append(workAddress);
map.put("address", workAddress);
}
address.close();
//Log.i("=========ddddddddddd=====", sb.toString());
//查询==公司名字==类型的数据操作.Organization.COMPANY ContactsContract.Data.CONTENT_URI
String orgWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
String[] orgWhereParams = new String[]{id,
ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE};
Cursor orgCur = contentResolver.query(ContactsContract.Data.CONTENT_URI,
null, orgWhere, orgWhereParams, null);
if (orgCur.moveToFirst()) {
//组织名 (公司名字)
String company = orgCur.getString(orgCur.getColumnIndex(ContactsContract.CommonDataKinds.Organization.DATA));
//职位
String title = orgCur.getString(orgCur.getColumnIndex(ContactsContract.CommonDataKinds.Organization.TITLE));
sb.append(",company").append(company);
sb.append(",title").append(title);
map.put("company", company);
map.put("title", title);
}
orgCur.close();
list.add(map);
Log.i("=========orgName=====", sb.toString());//查看所有的数据
Log.e("=========map=====", map.toString());//有很多数据的时候,只会添加一条 例如邮箱,
}
Log.i("=========list=====", list.toString());//
cursor.close();
}
<!-- 读联系人权限 -->
<uses-permission android:name="android.permission.READ_CONTACTS" />
<!-- 写联系人权限 -->
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<!-- 拨号权限 -->
<uses-permission android:name="android.permission.CALL_PHONE" />
<!-- 读短信权限 -->
<uses-permission android:name="android.permission.READ_SMS" />
下面看看具体列子:
import java.util.ArrayList;
import java.util.List;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;
import android.provider.CallLog.Calls;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Event;
import android.provider.ContactsContract.CommonDataKinds.Im;
import android.provider.ContactsContract.CommonDataKinds.Nickname;
import android.provider.ContactsContract.CommonDataKinds.Note;
import android.provider.ContactsContract.CommonDataKinds.Organization;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.provider.ContactsContract.CommonDataKinds.Website;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;
import android.util.Log;
/**
*
* @author larson
*
*/
public class ContactUtil {
public List<Contacts> list;
private Context context;
private JSONObject contactData;
private JSONObject jsonObject;
public ContactUtil(Context context) {
this.context = context;
}
// ContactsContract.Contacts.CONTENT_URI= content://com.android.contacts/contacts;
// ContactsContract.Data.CONTENT_URI = content://com.android.contacts/data;
/**
* 获取联系人信息,并把数据转换成json数据
*
* @return
* @throws JSONException
*/
public String getContactInfo() throws JSONException {
list = new ArrayList<Contacts>();
contactData = new JSONObject();
String mimetype = "";
int oldrid = -1;
int contactId = -1;
// 1.查询通讯录所有联系人信息,通过id排序,我们看下android联系人的表就知道,所有的联系人的数据是由RAW_CONTACT_ID来索引开的
// 所以,先获取所有的人的RAW_CONTACT_ID
Uri uri = ContactsContract.Data.CONTENT_URI; // 联系人Uri;
Cursor cursor = context.getContentResolver().query(uri,
null, null, null, Data.RAW_CONTACT_ID);
int numm = 0;
while (cursor.moveToNext()) {
contactId = cursor.getInt(cursor
.getColumnIndex(Data.RAW_CONTACT_ID));
if (oldrid != contactId) {
jsonObject = new JSONObject();
contactData.put("contact" + numm, jsonObject);
numm++;
oldrid = contactId;
}
mimetype = cursor.getString(cursor.getColumnIndex(Data.MIMETYPE)); // 取得mimetype类型,扩展的数据都在这个类型里面
// 1.1,拿到联系人的各种名字
if (StructuredName.CONTENT_ITEM_TYPE.equals(mimetype)) {
cursor.getString(cursor