获取具有独特结果的电子邮件或电话号码的联系人

时间:2015-05-14 12:32:32

标签: android email distinct android-contacts phone-number

我正在尝试列出包含电子邮件,电话或两者的联系人列表。 为此,我使用ContentResolver并将URI设置为ContactsContract.Data.CONTENT_URI,然后根据以下条件进行选择:

String SELECTION = ContactsContract.Data.DISPLAY_NAME_PRIMARY + "<>'' AND " + ContactsContract.Data.IN_VISIBLE_GROUP + "=1" + " AND (" + ContactsContract.Data.MIMETYPE + "=? OR " + ContactsContract.Data.MIMETYPE + "=?)";
String[] SELECTION_ARGS = new String[]{ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE,
                ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE};

我只对此类联系人的姓名感兴趣。但是因为数据表在给定的行中保存给定联系人的每个信息,所以结果游标中有重复的条目。

有没有办法如何区分这些条目?我正在使用CursorLoaderManagerCursorAdapter(也许唯一的方法就是在加载程序完成后将它们过滤掉来。)。

1 个答案:

答案 0 :(得分:0)

使用以下代码。

ContentResolver cr = context.getContentResolver();
    String[] PROJECTION = new String[] { ContactsContract.RawContacts._ID, 
            ContactsContract.CommonDataKinds.Phone.NUMBER,
            ContactsContract.CommonDataKinds.Email.DATA, 
            ContactsContract.CommonDataKinds.Photo.CONTACT_ID };
    String order = "CASE WHEN " 
            + ContactsContract.CommonDataKinds.Phone.NUMBER
            + " NOT LIKE '%@%' THEN 1 ELSE 2 END, " 
            + ContactsContract.Contacts.NUMBER
            + ", " 
            + ContactsContract.CommonDataKinds.Email.DATA
            + " COLLATE NOCASE";
    String filter = ContactsContract.CommonDataKinds.Email.DATA + " NOT LIKE ''";
    Cursor cur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, PROJECTION, filter, null, order);