在Android中按MIME类型获取联系人

时间:2012-01-20 13:42:18

标签: android

我想根据Android中的MIME类型获取联系人列表。

例如,我想要一个包含电子邮件地址的联系人列表。

2 个答案:

答案 0 :(得分:2)

您应该使用ContactsContract.RawContacts.Entity目录读取原始联系人以及与之关联的所有数据。如果原始联系人具有数据行,则实体游标将为每个数据行包含一行。如果原始联系人没有数据行,则游标仍将包含一行,其中包含原始联系人级别信息。

Uri rawContactUri =
  ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId);

Uri entityUri =
  Uri.withAppendedPath(rawContactUri, Entity.CONTENT_DIRECTORY);

Cursor c =
  getContentResolver().query(
    entityUri,
    new String[] {
      RawContacts.SOURCE_ID, Entity.DATA_ID, Entity.MIMETYPE, Entity.DATA1 },
    null, null, null);

try {
     while (c.moveToNext()) {
         String sourceId = c.getString(0);
         if (!c.isNull(1)) {
             String mimeType = c.getString(2);
             String data = c.getString(3);
             //decide here based on mimeType, see comment later
         }
     }
} finally {
     c.close();
}

例如,如果mimeTypePhone.CONTENT_ITEM_TYPE,则列DATA1会存储电话号码,但如果数据类型为Email.CONTENT_ITEM_TYPE,则为DATA1存储电子邮件地址。

答案 1 :(得分:1)

为了通用且面向未来,您可能希望使用CommonDataKinds.Email,它为内容类型和相应数据的列名提供常量,因此您可以编写类似< / p>

String email = c.getString(c.getColumnIndex(Email.ADDRESS));

当然,您可以ContentResolver.query()使用MIMETYPEDataColumns中的其他常量来检索感兴趣的记录。