Получать изменения контакта (добавлены, удалены и изменены) - PullRequest
5 голосов
/ 07 декабря 2011

Разве нет отметки времени для каждого контакта?

Мне нужно получать уведомление об изменении (добавлении, удалении или изменении) контакта. Я реализовал ContentObserver, но с помощью этого метода я могу получать уведомления только в случае изменения контакта, но не знаю, какой контакт был изменен! Есть предложения?

Ответы [ 2 ]

0 голосов
/ 24 февраля 2017

Я должен был сделать что-то подобное. То, что я сделал, было синхронизировать на основе метки времени. Я отслеживаю последнее время, когда контакт был обновлен, используя поле:

ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP

А затем я продолжаю свою операцию синхронизации и каждый раз обновляю переменную-член до последнего времени синхронизации. Когда синхронизация завершена, у нее есть время последней синхронизации контакта.

Когда наблюдатели изменений что-то регистрируют, я запрашиваю контент-провайдер для всех строк, на которые повлияло это время. И затем я перебираю курсор и обрабатываю каждую строку.

0 голосов
/ 07 декабря 2011

check ContactsConontract.RawContacts Колонка

int DIRTY 

read / write Флаг, указывающий, что VERSION изменился, и эта строка должна быть синхронизирована его учетной записью. Значение устанавливается равным «1» автоматически при каждом изменении необработанного контакта, если только для URI не указан параметр запроса CALLER_IS_SYNCADAPTER. Адаптер синхронизации должен всегда предоставлять этот параметр запроса для предотвращения ненужной синхронизации: пользователь изменяет некоторые данные на сервере, адаптер синхронизации обновляет контакт на телефоне (без флага CALLER_IS_SYNCADAPTER), который устанавливает флаг DIRTY, который вызывает синхронизацию с принести изменения на сервер.

Этот столбец используется адаптерами синхронизации для запуска синхронизации контакта при изменении контакта. Проверьте, получили ли вы что-нибудь из этого.

...