Android контактный запрос устранить дубликаты - PullRequest
0 голосов
/ 09 мая 2018

У меня есть очень специфический вопрос об устранении дубликатов из-за агрегированных контактов из различных добавленных учетных записей на устройстве с моим запросом к ContactsContract.Data

//
// (Mimetype == Phone OR Mimetype == Email)
// AND
// (
//   DisplayName LIKE searchQuery
//     OR
//   (Mimetype == Phone AND NormalizedPhone LIKE phoneNormalizedSearchQuery)
//     OR
//   (Mimetype == Email AND Email LIKE searchQuery)
// )
//
String selection = ""
        + "(" + ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + "'" + " OR " + ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE + "')"
        + " AND "
        + "("
        + ContactsContract.Data.DISPLAY_NAME + " LIKE '%" + searchQuery + "%'"
        + " OR "
        + "(" + ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + "'" + " AND " + ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER + " LIKE '%" + phoneNormalizedSearchQuery + "%'" + ")"
        + " OR "
        + "(" + ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE + "'" + " AND " + ContactsContract.CommonDataKinds.Email.ADDRESS + " LIKE '%" + searchQuery + "%'" + ")"
        + ")";

Uri uri = ContactsContract.Data.CONTENT_URI.buildUpon()
        .appendQueryParameter(ContactsContract.CommonDataKinds.Contactables.VISIBLE_CONTACTS_ONLY, "true")
        .build();


return new CursorLoader(context, uri, CONTACTS_PROJECTION, selection, null, ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");

У меня есть поисковый запрос свободной формы, который я хочу частично сопоставить с отображаемым именем, телефоном или электронной почтой. Это достаточно просто, работает очень хорошо и на самом деле очень быстро (достаточно быстро, чтобы подсвечивать изменяющиеся результаты в реальном времени, когда пользователь печатает даже с несколькими тысячами контактов).

Все отлично, кроме невозможности устранения дубликатов. Когда у пользователя есть несколько учетных записей на своем устройстве, что приводит к объединенным контактам, в результате этого запроса этот телефонный номер или адрес электронной почты будут несколько раз, когда пользователь имеет одинаковые контактные данные в своих добавленных учетных записях.

Я не хочу публиковать обработку курсора (без перебора курсора и создания списка в памяти, синхронизации данных в моей собственной БД и т. Д.).

Есть ли какой-либо способ выполнить этот запрос, с той лишь разницей, что результат будет ограничен записями с отдельным телефоном или электронной почтой?

1 Ответ

0 голосов
/ 14 мая 2018

AFAIK это не поддерживается ContentResolver API, и, в частности, не поддерживается ContactsContract. Возможно, вы захотите пересмотреть вариант постобработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...