Обнаружение одновременных правок событий
Я пишу SyncAdapter для синхронизации календаря, и мне интересно, как я могу обнаружить изменения, которые одновременно с синхронизацией. Я не нашел ничего в документах по этому делу.
Пример: 1) SyncAdapter получает курсор от провайдера календаря со всеми грязными событиями, 2) синхронизирует их и 3) сбрасывает грязные флаги. Между 1) и 3) пользователь изменяет одно из грязных событий. Эта модификация не будет синхронизирована, потому что грязный флаг сбрасывается после редактирования!
Я знаю, что у поставщика контактов есть поле версии, которое можно использовать для этого. А как насчет провайдера календаря?
1 ответ
Вот "хакерское" решение (я сам не пробовал).
Перед выполнением шага 1 вы заменяете значение DIRTY
поле с 2
(или любое значение, кроме 0
а также 1
) для всех рядов, которые имеют DIRTY = 1
,
то есть в SQL это было бы что-то вроде
update events set DIRTY = 2 where DIRTY = 1 and account_type = 'account type' and account_name = 'account name';
Тогда вы синхронизируете только те, которые имеют DIRTY = 2
,
Когда вы сбрасываете DIRTY
флаг, вы делаете это только для тех, кто еще DIRTY = 2
также.
Если событие имеет DIRTY = 1
, он был изменен между, и вам нужно начать все сначала.
Наборы CalendarProvider DIRTY = 1
всякий раз, когда вызов не синхронизирующего адаптера изменяет событие. Вы можете использовать это, чтобы обнаружить любые изменения во время синхронизации и "подтвердить" только те события, которые не были изменены.