如何使用 Loaders 获取联系人姓名、phone 号码、电子邮件详细信息

How to get contact name, phone number, email details using Loaders

我们可以使用此 uri

获取联系人姓名和 phone 号码
ContactsContract.CommonDataKinds.Phone.CONTENT_URI

我们可以使用 uri

获取电子邮件地址
ContactsContract.CommonDataKinds.Email.CONTENT_URI

但是,我如何将这两个 uri 传递给加载器并像在代码中那样返回游标加载器。在此代码中,我只返回姓名和号码,但我如何才能收到电子邮件以获取我如何才能通过

ContactsContract.CommonDataKinds.Email.CONTENT_URI

给它

return new CursorLoader(this,
                 ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                projection,
                null,
                null,
                null);

CommonDataKinds.PhoneCommonDataKinds.Email实际上都是大tableContactsContract.Data, that table contains lots of other info you might not be interested in, so you can select only the items that interest you (phones and emails) using Data.MIMETYPE的一部分。

所以 CursorLoader 初始化可以是这样的:

new CursorLoader(this,
    ContactsContract.Data.CONTENT_URI,
    projection,
    ContactsContract.Data.MIMETYPE + " IN (" + CommonDataKinds.Phone.CONTENT_TYPE + ", " + CommonDataKinds.Email.CONTENT_TYPE + ")",
    null,
    null);

但是,请注意,当您仅在 CommonDataKinds.Phone.CONTENT_URI 上查询时,您会得到每个 phone 而不是每个联系人的点赞,您现在会得到 一行phone 或电子邮件,不按联系人汇总。

您应该将 Data.MIMETYPE 添加到您的投影中,并使用它来确定当前行是 phone 行还是电子邮件行。