8

Я создаю приложение, которое в значительной степени зависит от контактов пользователя.Android: Прослушивание изменений контактов, таких как WhatsApp do

Я создал Account и создаю RawContacts от имени этой учетной записи, если необходимо.
И я использую SyncAdapter, и все отлично.

Но я до сих пор отсутствуют некоторые части этой головоломки:

Я пытаюсь реализовать поведение, аналогичное WhatsApp. Такие, что:

Когда происходит изменение имени или телефона любого контакта - оно будет отправлено на сервер для оценки.

Был ли этот контакт уже в «моем» RawContacts, был ли он только что создан пользователем.

Я знаю, что есть ContentObserver, но отслеживание ContactsContract.Contacts.CONTENT_URI кажется неправильным, потому что оно не дает конкретных изменений, плюс оно увеличивается до много раз, и от многих событий, которые меня не интересуют.

Я знаю, что WhatsApp используют SyncAdapter, но я думаю, что они могут что-то делать больше.

Любая идея была бы высоко оценена.

+0

@Hagai ... привет, какое-либо обновление о том, как вы справились с этим? Я использовал CONTACT_LAST_UPDATED_TIMESTAMP в своем коде, чтобы получать последние обновленные контакты, но эта марка не изменяется, если вы обновляете любое поле контакта, у которого есть только идентификатор электронной почты. –

ответ

0

ContentObserver отслеживание ContactsContract.Contacts.CONTENT_URI действительно путь.

Когда вы получите onChange() вы запрашиваете raw_contacts таблицу с условием:

String where = "(rawcontacts.dirty = true or rawcontacts.deleted = 1) and rawcontacts.account_type = <your_custom_type>" 

Результат даст вам контакты добавлены, обновлены или удалены.

Если вас интересует более подробная информация - причина, по которой вам необходимо подписаться на ContactsContract.Contacts.CONTENT_URI, заключается в том, что поставщик контактов в настоящее время не уведомляет, какие контакты были изменены в onChange(). Это связано с транзакциями applyBatch(), где могут меняться несколько контактов. Возможно, в будущем будет возможность подписаться на подмножество, но в настоящее время их нет.

Смежные вопросы