检索所有手机联系人,无论他们的群组

时间:2015-02-17 08:24:25

标签: android android-sqlite android-contacts google-contacts

我在检索所有手机通讯录时遇到问题。

使用以下选择条款时,我未获得未与群组相关联的联系人(例如Google特定帐户组):

    final static String SELECTION = (Utils.hasHoneycomb()
            ? Contacts.DISPLAY_NAME_PRIMARY
            : Contacts.DISPLAY_NAME) + "<>''" + " AND " + Contacts.IN_VISIBLE_GROUP + "=1";

...
... 

// onCreateLoader() code:
return new CursorLoader(getActivity(), Contacts.CONTENT_URI, ContactsQuery.PROJECTION,
            ContactsQuery.SELECTION, null, ContactsQuery.SORT_ORDER);

从其中一个Google教程或演示项目获得此片段。

根据文档,我意识到Contacts.IN_VISIBLE_GROUP + "=1"导致过滤不属于任何群组的联系人,所以我只是删除了这个条件,期望获得不属于任何群组的联系人:

final static String SELECTION = (Utils.hasHoneycomb()
            ? Contacts.DISPLAY_NAME_PRIMARY
            : Contacts.DISPLAY_NAME) + "<>''";

使用此SELECTION子句后 - 我得到的所有联系人包括不属于任何组的联系人,但现在我得到了属于某个组的所有联系人的重复

请帮助我了解如何执行返回所有联系人而无需重复的查询

提前致谢

1 个答案:

答案 0 :(得分:0)

Uri contactUri = data.getData();
                String[] projection = {ContactsContract.CommonDataKinds.Phone.NUMBER,
                        ContactsContract.Contacts.DISPLAY_NAME};
                Cursor cursor = activity.getContentResolver()
                        .query(contactUri, projection, null, null, null);
                cursor.moveToFirst();
int column = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
                String number = cursor.getString(column);

                int column1 = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
                String name = cursor.getString(column1);