#android #android-contacts #android-cursor
#Android #android-контакты #android-курсор
Вопрос:
В настоящее время в моем приложении я извлекаю все контакты с помощью запроса курсора followign.
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:
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));
}