Обнаружение одновременных правок событий

Я пишу 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всякий раз, когда вызов не синхронизирующего адаптера изменяет событие. Вы можете использовать это, чтобы обнаружить любые изменения во время синхронизации и "подтвердить" только те события, которые не были изменены.

Другие вопросы по тегам