Я пишу приложение, которое должно знать, когда собрание добавляется/удаляется/изменяется в календаре.
Я знаю, как получить все данные из календаря, используя CursorLoader
в URI календаря.
Также я знаю, как слушать изменения календаря, используя функцию ContentObserver
.
Проблема в том, что ContentObserver.onChange(boolean selfChange, Uri uri)
не предоставляет информацию об измененном событии. поэтому единственный способ узнать, в чем заключалось изменение, - это снова загрузить весь календарь (или его часть), используя CursorLoader
и сравнив старый с новым.
Есть ли способ "зарегистрироваться на изменения" в календаре и получать измененные события?
Android, прослушиватель/наблюдатель/обратный вызов при изменении события календаря
comment
перейдите по ссылке ниже, если вы получили ответ stackoverflow.com/questions /15217723/
- person Damodhar Meshram   schedule 07.06.2015
Ответы (2)
К сожалению, такой возможности нет. Я даже дошел до того, что отразил весь комплект, который шел с этим намерением, - ничего. ИМХО, некоторых поверхностей API Android совершенно не хватает, я думаю, это только один из таких случаев.
person
Eyal Perry
schedule
12.06.2015
Каждое событие после события ручного редактирования устанавливает CalendarContract.DIRTY = 1 (используется для указания наличия локальных, несинхронизированных изменений). Найдите эти события. Не забудьте сбросить этот флаг (равно 0) после синхронизации.
person
ilyamuromets
schedule
30.09.2016
но могу ли я быть уверен, что этот флаг останется равным 1 к тому времени, когда я обработаю это событие? а также мне нужно обработать ситуацию, в которой я читаю один и тот же объект в два разных раза (флаг оставался 1 для некоторых событий)
- person Eli Skoran; 02.10.2016
Каждое событие имеет свой собственный флаг CalendarContract.DIRTY (значение по умолчанию — 0). Когда пользователь редактирует событие, флаг CalendarContract.DIRTY принимает значение 1, и только вы можете сбросить этот флаг на 0 после обработки события. Пользуюсь этим механизмом давно и все работает отлично.
- person ilyamuromets; 03.10.2016
это также работает, когда календарь изменяется в облаке и синхронизируется с устройством.
- person Eli Skoran; 16.10.2016
например, если вы меняете событие со своего компьютера (внешнего просмотра) и оно синхронизируется с устройством. будет ли он также иметь DIRTY = 1?
- person Eli Skoran; 16.10.2016
Нет. Флаг DIRTY принимает значение 1, только если вы вручную меняете/создаете событие в устройстве и не сбрасывается сам по себе.
- person ilyamuromets; 17.10.2016