2017-01-18 8 views
0

Я пытаюсь понять всю концепцию адаптеров синхронизации за последние пару недель и у вас мало вопросов относительно функциональности.Android - Слушайте изменения в контактах android и получите дельта

Я хочу слушать все изменения в андроида контактов

Подход 1:

Я создал пользовательский счет, а также создал синхронизации адаптера. Написал прослушиватель вещания, прослушивающий ContactsContract.Contacts.CONTENT_URI, и в public void onChange(boolean selfChange) от ContentObserver класс i я звоню ContentResolver.requestSync(account,ContactsContract.AUTHORITY,bundle), который выступает в качестве точки запуска, чтобы запустить адаптер синхронизации, когда когда-либо происходит изменение данных контактов.

Все выглядит хорошо, пока здесь, но в классе SyncAdapter я не получаю никаких данных в SyncResult переменной в onPerofmSync

Так как я могу получить дельта изменения от контактов?

Исправьте меня, если это не способ запуска адаптера синхронизации.

подход 2:

Я последовал некоторый пример, где они говорили о запросах к базе данных контактов, где dirtyFlag установлен в 1. я был в состоянии получить изменения, но мой вопрос

кто установит это значение dirtyFlag обратно в '0'?

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

Подход 3:

запросов базы данных и следить за version для каждого контакта в моей базе данных, и если «версия» изменилось считает, что в изменении контакта. Это похоже на тяжелый процесс.

Наконец, мой вопрос - это лучший способ прослушать изменения в контактах на устройстве пользователя?

ответ

0

Что вы можете сделать, это сохраняется (возможно, используя локальную базу данных MySql) отображение между Contacts.LOOKUP_KEY и его RawContacts.VERSION значениями.

После того, как вы получите радиопередачу, что изменение произошло в Contacts БД (через onChange) вы запрашиваете всех RawContacts.VERSION с и их Contacts.LOOKUP_KEY и сравнить его с состоянием вы еще сохранялось до того, если один из них изменился, вы бы знайте, что контакт изменился.

+0

Да, это третий подход, как в моем вопросе. – Prakash

+1

yep, так вот что я буду делать, это не такой тяжелый процесс, и я не вижу никакого способа сделать это без запроса, который просматривает все контакты. – marmor

+0

Итак, каждый раз, когда есть самый короткий триггер вызова «registerContentObserver (ContactsContract.Contacts.CONTENT_URI), мы должны выполнить запрос всех контактов, чтобы увидеть, что изменилось, и что у нас есть? –