美文网首页
Android 获取通讯录信息

Android 获取通讯录信息

作者: ff_hh | 来源:发表于2017-10-24 17:02 被阅读0次

    启动通讯录页面获取用户点击的 item 的数据(姓名、手机号)

    //启动通讯录页面

    startActivityForResult(newIntent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_UPI),0);

    @Override

    protectedvoidonActivityResult(intrequestCode,intresultCode, 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 =newString[]{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());

    }

    }

    所需权限

    获取联系人其他信息

    参考链接

    http://www.cnblogs.com/zhujiabin/p/6645551.html

    参考代码

    publicvoidtestGetAllContact()throwsThrowable

    {

    //获取联系人信息的Uri

    Uri uri = ContactsContract.Contacts.CONTENT_URI;

    //获取ContentResolver

    ContentResolver contentResolver = ContactListActivity.this.getContentResolver();

    //查询数据,返回Cursor

    Cursor cursor = contentResolver.query(uri,null,null,null,null);

    List> list =newArrayList>();

    while(cursor.moveToNext())

    {

    Map map =newHashMap();

    StringBuilder sb =newStringBuilder();

    //获取联系人的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 =newString[]{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();

    }

    相关文章

      网友评论

          本文标题:Android 获取通讯录信息

          本文链接:https://www.haomeiwen.com/subject/hnrxpxtx.html