在Android中通过MIME类型获取联系人

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

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

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();
}

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

1
为了通用和未来性,您可能希望使用CommonDataKinds.Email,它为各自的数据提供内容类型和列名称的常量,因此您可以编写类似以下的代码:
String email = c.getString(c.getColumnIndex(Email.ADDRESS));

当然,您可以为 ContentResolver.query() 提供条件,仅检索感兴趣的记录,使用 DataColumns 中的 MIMETYPE 和其他常量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接