2016-12-20 9 views
1

Есть ли эффективный запрос для поиска всех агрегированных контактов для определенного имени учетной записи &?ContactsContract.Contacts запрос для конкретной учетной записи

В таблице ContactsContract.Contacts есть столбец IN_VISIBLE_GROUP, который вступает в силу для членства в контактной группе. Итак, если пользователь выбрал различные членства в группах для учетных записей, этот столбец будет установлен.

Кажется, что нет какой-либо эквивалентной колонки in-visible-account. Тем не менее, приложение для контактов Android позволяет выбрать определенную учетную запись для просмотра, не нажимая «настроить» и выбрав группы. При этом обновляется таблица ContactsContract.Settings. Эффект не достигает таблицы Contacts.

Я хотел бы иметь возможность сделать один запрос и получить один указатель назад, который имеет точно соответствующий набор совокупности (значение из таблицы контактов). Это возможно?

+0

Похоже, что таблица настроек неправильно используется в приложении для контактов Android. Как только вы выберете «customize», похоже, никогда не обновлять Settings.IN_VISIBLE_GROUP еще раз, делая таблицу бесполезной для этой цели. Я наблюдал это на нескольких устройствах. –

ответ

2

найти все агрегатные контакты для определенного имени учетной записи & типа

Contacts являются счета конкретно, они объединены в нескольких RawContacts, каждый из которых может быть сохранен на другой Account.

Вы можете запросить все RawContacts для конкретного Account:

Cursor c = cr.query(RawContacts.CONTENT_URI, 
    new String[]{ RawContacts._ID, RawContacts.CONTACT_ID, RawContacts._ID, ... }, 
    RawContacts.ACCOUNT_NAME + " = '" + accountName + "' AND " + RawContacts.ACCOUNT_TYPE + " = '" + accountType + "'", null, null); 

Если вы хотите Contacts вы можете поместить все контактно-идентификаторы, которые вы нашли в приведенном выше запросе в массиве, а также запрос на Contacts таблице:

Cursor c = cr.query(Contacts.CONTENT_URI, 
    new String[]{ Contacts._ID, Contacts.DISPLAY_NAME, ... }, 
    Contacts._ID + " IN (" + arrayOfIds + ")", null, null); 
+0

Я дал вам +1, потому что, теоретически, я думаю, что ваш ответ работает. Я подумал об этом, но не пробовал, потому что меня беспокоит огромный потенциальный размер «arrayOfIds». Считаете ли вы, что это не проблема как для ограничений запросов, так и для эффективности скорости? –

+0

У меня есть что-то подобное в моем приложении, в редких случаях может возникнуть проблема с ограничениями размера запросов MySQL, но это можно обойти, выполнив второй запрос большими партиями, со скоростью у меня не было проблем – marmor

+0

Звучит разумно. Я буду отмечать это как правильный ответ, потому что я сомневаюсь, что Google предоставил какие-то лучшие альтернативы. –