【问题标题】:Get contacts by MIME type in Android在 Android 中按 MIME 类型获取联系人
【发布时间】:2013-10-23 04:29:41
【问题描述】:

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

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

【问题讨论】:

    标签: android


    【解决方案1】:

    您应该使用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 存储电子邮件地址。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-08
        • 2013-12-16
        • 1970-01-01
        • 2012-10-11
        相关资源
        最近更新 更多