Android 获取通讯录信息
启动通讯录页面获取用户点击的 item 的数据(姓名、手机号)
//启动通讯录页面
startActivityForResult(new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_UPI),0);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK){
// ContentProvider展示数据类似一个单个数据库表
// ContentResolver实例带的方法可实现找到指定的ContentProvider并获取到ContentProvider的数据
ContentResolver reContentResolverol = getContentResolver();
// URI,每个ContentProvider定义一个唯一的公开的URI,用于指定到它的数据集
Uri contactData = data.getData();
Log.e("tag_uri= ", contactData);
// 查询就是输入URI等参数,其中URI是必须的,其他是可选的,如果系统能找到URI对应的ContentProvider将返回一个Cursor对象.
Cursor cursor = reContentResolverol.query(contactData, null, null, null, null);
cursor.moveToFirst();
// 条件为联系人ID
String contactId = cursor.getString(cursor
.getColumnIndex(ContactsContract.Contacts._ID));
// 获得DATA表中的电话号码,条件为联系人ID,因为手机号码可能会有多个
Cursor phone = reContentResolverol.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = "
+ contactId, null, null);
while (phone.moveToNext()) {
String usernumber = phone
.getString(phone
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
String name = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
Log.e("tag_x", "userName= " + usernumber + "\n name = " + name, getClass());
}
}
}
获取通讯录列表信息(姓名、手机号)
ContentResolver contentResolver = context.getContentResolver();
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
// Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
String[] projection = new String[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER};
Cursor cursor = contentResolver.query(uri, projection, null, null, null);
// cursor.moveToFirst();
while (cursor.moveToNext()){
//拿到联系人id 跟name
// int id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phone = cursor.getString(cursor.getColumnIndex("data1"));
LogUtil.e("name = " + name, context.getClass());
LogUtil.e("phone = " + phone, context.getClass());
String[] columnNames = cursor.getColumnNames();
for (String cName:
columnNames) {
LogUtil.e("cName= " + cName, context.getClass());
}
}
所需权限
<!-- 读联系人权限 -->
<uses-permission android:name="android.permission.READ_CONTACTS" />
获取联系人其他信息
参考链接
http://www.cnblogs.com/zhujiabin/p/6645551.html
参考代码
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();
}