访问手机联系人

本文介绍了一种方法来读取Android设备上的联系人信息,包括姓名、电话号码、电子邮件地址、即时消息账号、地址、组织机构、备注及昵称等。通过使用Android提供的ContactsContract API,可以方便地查询并获取联系人详情。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.Data;
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.util.Log;

public class ContactActivity extends Activity {
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  // 获得所有的联系人
  Cursor cur = getContentResolver().query(
    ContactsContract.Contacts.CONTENT_URI,
    null,
    null,
    null,
    ContactsContract.Contacts.DISPLAY_NAME
      + " COLLATE LOCALIZED ASC");
  // 循环遍历
  if (cur.moveToFirst()) {
   int idColumn = cur.getColumnIndex(ContactsContract.Contacts._ID);

   int displayNameColumn = cur
     .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);

   do {
    // 获得联系人的ID号
    String contactId = cur.getString(idColumn);
    // 获得联系人姓名
    String disPlayName = cur.getString(displayNameColumn);
    
    // 查看该联系人有多少个电话号码。如果没有这返回值为0
    int phoneCount = cur
      .getInt(cur
        .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
    Log.i("username", disPlayName);
    if (phoneCount > 0) {
     // 获得联系人的电话号码
     Cursor phones = getContentResolver().query(
       ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
       null,
       ContactsContract.CommonDataKinds.Phone.CONTACT_ID
         + " = " + contactId, null, null);
     if (phones.moveToFirst()) {
      do {
       // 遍历所有的电话号码
       String phoneNumber = phones
         .getString(phones
           .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
       String phoneType = phones
         .getString(phones
           .getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
       Log.i("phoneNumber", phoneNumber);
       Log.i("phoneType", phoneType);
      } while (phones.moveToNext());
     }
    }

    // 获取该联系人邮箱
    Cursor emails = getContentResolver().query(
      ContactsContract.CommonDataKinds.Email.CONTENT_URI,
      null,
      ContactsContract.CommonDataKinds.Phone.CONTACT_ID
        + " = " + contactId, null, null);
    if (emails.moveToFirst()) {
     do {
      // 遍历所有的电话号码
      String emailType = emails
        .getString(emails
          .getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
      String emailValue = emails
        .getString(emails
          .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
      
      Log.i("emailType", emailType);
      Log.i("emailValue", emailValue);
     } while (emails.moveToNext());
    }

    // 获取该联系人IM
    Cursor IMs = getContentResolver().query(
      Data.CONTENT_URI,
      new String[] { Data._ID, Im.PROTOCOL, Im.DATA },
      Data.CONTACT_ID + "=?" + " AND " + Data.MIMETYPE + "='"
        + Im.CONTENT_ITEM_TYPE + "'",
      new String[] { contactId }, null);
    if (IMs.moveToFirst()) {
     do {
      String protocol = IMs.getString(IMs
        .getColumnIndex(Im.PROTOCOL));
      String date = IMs
        .getString(IMs.getColumnIndex(Im.DATA));
      Log.i("protocol", protocol);
      Log.i("date", date);
     } while (IMs.moveToNext());
    }

    // 获取该联系人地址
    Cursor address = getContentResolver()
      .query(
        ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI,
        null,
        ContactsContract.CommonDataKinds.Phone.CONTACT_ID
          + " = " + contactId, null, null);
    if (address.moveToFirst()) {
     do {
      // 遍历所有的地址
      String street = address
        .getString(address
          .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET));
      String city = address
        .getString(address
          .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));
      String region = address
        .getString(address
          .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION));
      String postCode = address
        .getString(address
          .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE));
      String formatAddress = address
        .getString(address
          .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS));
      Log.i("street", street);
      Log.i("city", city);
      Log.i("region", region);
      Log.i("postCode", postCode);
      Log.i("formatAddress", formatAddress);
     } while (address.moveToNext());
    }

    // 获取该联系人组织
    Cursor organizations = getContentResolver().query(
      Data.CONTENT_URI,
      new String[] { Data._ID, Organization.COMPANY,
        Organization.TITLE },
      Data.CONTACT_ID + "=?" + " AND " + Data.MIMETYPE + "='"
        + Organization.CONTENT_ITEM_TYPE + "'",
      new String[] { contactId }, null);
    if (organizations.moveToFirst()) {
     do {
      String company = organizations.getString(organizations
        .getColumnIndex(Organization.COMPANY));
      String title = organizations.getString(organizations
        .getColumnIndex(Organization.TITLE));
      Log.i("company", company);
      Log.i("title", title);
     } while (organizations.moveToNext());
    }

    // 获取备注信息
    Cursor notes = getContentResolver().query(
      Data.CONTENT_URI,
      new String[] { Data._ID, Note.NOTE },
      Data.CONTACT_ID + "=?" + " AND " + Data.MIMETYPE + "='"
        + Note.CONTENT_ITEM_TYPE + "'",
      new String[] { contactId }, null);
    if (notes.moveToFirst()) {
     do {
      String noteinfo = notes.getString(notes
        .getColumnIndex(Note.NOTE));
      Log.i("noteinfo", noteinfo);
     } while (notes.moveToNext());
    }

    // 获取nickname信息
    Cursor nicknames = getContentResolver().query(
      Data.CONTENT_URI,
      new String[] { Data._ID, Nickname.NAME },
      Data.CONTACT_ID + "=?" + " AND " + Data.MIMETYPE + "='"
        + Nickname.CONTENT_ITEM_TYPE + "'",
      new String[] { contactId }, null);
    if (nicknames.moveToFirst()) {
     do {
      String nickname_ = nicknames.getString(nicknames
        .getColumnIndex(Nickname.NAME));
      Log.i("nickname_", nickname_);
     } while (nicknames.moveToNext());
    }

   } while (cur.moveToNext());

  }

 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值