Ответ 1
Контакты должны иметь значение ContactsContract.RawContacts.VERSION
.
Если вы сохраните эту версию на сервере (или в базе данных вашего приложения), вы можете определить, изменился ли контакт с момента последнего отправки на сервер.
Я работаю над 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!
Контакты должны иметь значение ContactsContract.RawContacts.VERSION
.
Если вы сохраните эту версию на сервере (или в базе данных вашего приложения), вы можете определить, изменился ли контакт с момента последнего отправки на сервер.
Вы получите количество контактов, обновленных через определенное время от контактной базы данных, используя следующий запрос.
ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP
попробуйте сравнить последнее загруженное время с вашим сервером с этим временем. Надеемся, что после успешной загрузки на сервер вы получите список обновленных контактов.
проверить это http://developer.android.com/reference/android/provider/ContactsContract.ContactsColumns.html#CONTACT_LAST_UPDATED_TIMESTAMP
Как вы сказали, вы сохраняете Contacts._ID
в своей локальной базе данных и извлекаете phone number
и другую информацию, связанную с контактом, из Contacts
db.
Я бы предложил вам сохранить данные из таблицы RawContacts
в локальное сопоставление и проверить записи, связанные с raw_contact_id
в таблице контактов data
, с которыми вы легко получите все контакты.
Чтобы проверить измененные или удаленные контакты
При наличии raw_contact_id
, присутствующего в вашей локальной таблице, сопоставление с таблицей data
, если изменяется поле контакта, связанное с raw_contact_id's
version
, или изменилось поле isDeleted
(т.е. Контакт удален из контактного приложения)
Когда я это использовал, я использовал 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.