【问题标题】:Android, Listener/Observer/Callback on calendar event changeAndroid,日历事件更改时的监听器/观察器/回调
【发布时间】:2015-06-07 08:04:06
【问题描述】:

我正在编写一个应用程序,它需要知道何时在日历中添加/删除/更改会议。
我知道如何使用日历 uri 上的 CursorLoader 从日历中获取所有数据。
我也知道如何使用ContentObserver 收听日历更改。

问题是ContentObserver.onChange(boolean selfChange, Uri uri) 没有提供有关更改事件的信息。所以让我知道变化的唯一方法是使用CursorLoader 再次加载整个日历(或其中的一部分)并将旧日历与新日历进行比较。

有没有办法在日历上“注册更改”并接收更改的事件?

【问题讨论】:

标签: android calendar android-calendar android-cursorloader contentobserver


【解决方案1】:

很遗憾,没有这样的选择。我什至反映了该 Intent 附带的整个 Bundle - 没有。恕我直言,Android API 的某些方面非常缺乏,我猜这只是其中之一。

【讨论】:

    【解决方案2】:

    手动编辑事件后的每个事件都设置 CalendarContract.DIRTY = 1(用于指示存在本地、未同步的更改)。找到这些事件。同步后不要忘记重置此标志(等于 0)。

    【讨论】:

    • 但是我可以确定当我来处理这个事件时这个标志会保持为 1 吗?而且我还需要处理我在两次不同时间读取同一个对象的情况(对于某些事件,标志保持为 1)
    • 每个事件都有自己的 CalendarContract.DIRTY 标志(默认值为“0”)。当用户编辑事件时,CalendarContract.DIRTY 标志取值为“1”,只有您可以在事件处理后将此标志重置为“0”。这个机制我用了很长时间,一切正常。
    • 在云端更改日历并同步到设备时也可以使用。
    • 例如,如果您从 PC (outlook) 更改事件并将其同步到设备。它还会有 DIRTY = 1 吗?
    • 没有。仅当您在设备中手动更改/创建事件并且不会自行重置时,DIRTY 标志才取值“1”。
    猜你喜欢
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多