只获得"正常"往来

时间:2014-06-18 13:55:04

标签: android android-contacts android-cursor

目前在我的应用程序中,我使用followign Cursor查询获取所有联系人。

String[] columnsToReturn = new String[] {
    ContactsContract.Contacts._ID,
    ContactsContract.Contacts.DISPLAY_NAME_PRIMARY
};

Cursor contactsCursor = getActivity().getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, columnsToReturn, null, null, null);

这将返回所有联系人,包括Skype,WhatsApp等。我不想要这些。我只想要“正常”的。那些不适用于任何应用的应用,只适用于存储在您Google帐户中的应用。我该怎么做?

另外,我可以排除用户自己的条目吗?例如,我的名字在列表中多次出现在我的所有不同电子邮件地址中。

1 个答案:

答案 0 :(得分:0)

ContactsContract.Contacts表包含"合并"触点。

  

...表示相同的原始联系人的聚合记录   人

如果您要查询特定帐户或帐户类型的联系人,则需要使用RawContacts。例如,对于Google联系人,这将是:

Cursor c = getContentResolver().query(
        RawContacts.CONTENT_URI,
        new String[] { RawContacts.CONTACT_ID, RawContacts.DISPLAY_NAME_PRIMARY },
        RawContacts.ACCOUNT_TYPE + "= ?",
        new String[] { "com.google" },
        null);

ArrayList<String> myContacts = new ArrayList<String>();
int contactNameColumn = c.getColumnIndex(RawContacts.DISPLAY_NAME_PRIMARY);
while (c.moveToNext())
{
    // You can also read RawContacts.CONTACT_ID to read the
    // ContactsContract.Contacts table or any of the other related ones.
    myContacts.add(c.getString(contactNameColumn));
}