现在的位置: 首页 > 综合 > 正文

联系人API

2013年02月01日 ⁄ 综合 ⁄ 共 2505字 ⁄ 字号 评论关闭

Android 的联系人在一个数据库中维护并通过一个ContentProvider公开, 联系人API 使用一组 android.provider.ContactsContract 为根的接口和类, 本API 内容博大精深.

理解联系人表和它们的关联视图是理解联系人API 的关键。

以下几点认识

1.  打开联系人应用程序时看到的联系人称为聚合联系人. 每个聚合联系人的底层是原始联系人

2.  属于一个账户的一组联系人称为原始联系人.  而聚合联系人则相反,它跨越了账户边界,最终属于整个设备.

3.  要读取联系人,需要申明以下权限  android.permission.READ_CONTACTS

用于读取所有联系人的URI  为ContactsContract.Contacts.CONTENT_URI

联系人的查找URI : ContactsContract.Contacts.CONTENT_LOOKUP_URI, 每个查找URI 表示一组串联在一起的原始联系人身份.

根据联系人查找Uri 进行的查找返回一个聚合联系人,而不是原始联系人.

原始人联系人的URI:  ContactsContract.RawContacts.CONTENT_URI

原始实体内容URI: ContactsContract.RawContactsEntity.CONTENT_URI

关于添加联系人和它的详细信息

要向联系人写入数据,需要声明以下权限  android.permission.WRITE_CONTACTS

添加联系人和详细信息的流程:

(1) 首先使用预定义账户的名称和类型向该账户添加一个新原始联系人,通过insertRawContact()   方法

(2)  获取原始联系人ID并在数据表中插入一个名称记录, 通过 insertName()  方法

(3)  获取原始联系人ID 并在数据表中插入一个电话号码记录,通过insertPhone()  方法

添加联系人代码 如下:

/**
 * 向联系人添加详细信息
 *
 */
public class AddContactFunctionTester extends ContactDataFunctionTester {
 public AddContactFunctionTester(Context ctx, IReportBack target) {
  super(ctx, target);
 }

 public void addContact() {
  long rawContactId = insertRawContact();
  this.mReportTo.reportBack(tag, "RawcontactId:" + rawContactId);
  insertName(rawContactId);
  insertPhoneNumber(rawContactId);
  showRawContactsDataForRawContact(rawContactId);
 }

 private void insertName(long rawContactId) {
  ContentValues cv = new ContentValues();
  cv.put(Data.RAW_CONTACT_ID, rawContactId);
  cv.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
  cv.put(StructuredName.DISPLAY_NAME, "John Doe_" + rawContactId);
  this.mContext.getContentResolver().insert(Data.CONTENT_URI, cv);
 }

 private void insertPhoneNumber(long rawContactId) {
  ContentValues cv = new ContentValues();
  cv.put(Data.RAW_CONTACT_ID, rawContactId);
  cv.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
  cv.put(Phone.NUMBER, "123 123 " + rawContactId);
  cv.put(Phone.TYPE, Phone.TYPE_HOME);
  this.mContext.getContentResolver().insert(Data.CONTENT_URI, cv);
 }

 private long insertRawContact() {
  ContentValues cv = new ContentValues();
  cv.put(RawContacts.ACCOUNT_TYPE, "com.google");
  cv.put(RawContacts.ACCOUNT_NAME, "***@gmail.com");
  Uri rawContactUri = this.mContext.getContentResolver().insert(
    RawContacts.CONTENT_URI, cv);
  if(rawContactUri != null) {
   long rawContactId = ContentUris.parseId(rawContactUri);
   return rawContactId;
  }
  return 0L;
 }

 private void showRawContactsDataForRawContact(long rawContactId) {
  Cursor c = null;
  try {
   Uri uri = ContactsContract.RawContactsEntity.CONTENT_URI;
   c = this.getACursor(uri, "_id = " + rawContactId);
   this.printRawContactsData(c);
  } finally {
   if (c != null)
    c.close();
  }
 }
}

  

代码示例请参见 
TestContacts 
工程

抱歉!评论已关闭.