Обновлять контакты в Android для синхронизации контактов

Я работаю над Contact Sync в Android, и я успешно сделал это с First Contact Sync.

Вот что я делаю.  1. Извлечение всех контактов и сохранение каждого контакта в БД с помощью Contact._ID  2. Извлечение имен и номеров телефонов и сохранение в БД.

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

Теперь проблема в том, как я могу проверить, обновлен ли мой конкретный контакт или нет?

Я внедрил Broadcast Receiver, чтобы мое приложение могло рассказать об обновлении/добавлении/удалении контакта. Но я хочу трактовать конкретный контакт.

Я нашел одно решение, которое является Dirty Flag. Он рассказывает нам о том, является ли его обновленным или нет. Вот ссылка: http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.html

Но я не могу использовать этот Dirty Flag, может ли кто-нибудь помочь мне, выполнив Dirty Flag.

Спасибо, Advance!

Ответы

Ответ 1

Контакты должны иметь значение ContactsContract.RawContacts.VERSION.

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

Ответ 2

Вы получите количество контактов, обновленных через определенное время от контактной базы данных, используя следующий запрос.

 ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP 

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

проверить это http://developer.android.com/reference/android/provider/ContactsContract.ContactsColumns.html#CONTACT_LAST_UPDATED_TIMESTAMP

Ответ 3

Как вы сказали, вы сохраняете Contacts._ID в своей локальной базе данных и извлекаете phone number и другую информацию, связанную с контактом, из Contacts db.

Я бы предложил вам сохранить данные из таблицы RawContacts в локальное сопоставление и проверить записи, связанные с raw_contact_id в таблице контактов data, с которыми вы легко получите все контакты.

Чтобы проверить измененные или удаленные контакты При наличии raw_contact_id, присутствующего в вашей локальной таблице, сопоставление с таблицей data, если изменяется поле контакта, связанное с raw_contact_id's version, или изменилось поле isDeleted (т.е. Контакт удален из контактного приложения)

Ответ 4

Когда я это использовал, я использовал ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP, но у меня была проблема, чтобы понять, что это было миллисекунды, я использовал столбец для получения новых файлов, и он находится в секундах (MediaStore.MediaColumns.DATE_ADDED) поэтому обратите внимание на использование правильного номера.

Uri uri = ContactsContract.Contacts.CONTENT_URI;
Cursor cursorNew;
cursorNew = contentResolver.query(uri,
        null,
        ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP + ">=?",
        new String[]{lastUpdate},
        null        // Ordering
);

'lastUpdate' - это строка с моей меткой времени

Еще одна вещь, на которую стоит обратить внимание, - это столбец Contact, только что появившийся на API 18, последняя версия Jelly Bean, поэтому для решения этой проблемы раз и навсегда я просто изменил свой файл gradle.