【问题标题】:Listen for new calendar events收听新的日历事件
【发布时间】:2014-02-05 18:31:54
【问题描述】:

主要是我需要根据默认 android 日历 (Google) 中的事件做出反应。

在任何给定时间查询提供者并获取事件相当容易,但我的数据必须始终保持一致。 我想要的是避免每 x 分钟查询提供者以检查新事件。

当应用程序存储新事件时(仅当事件被触发时),我找不到任何系统广播。 为了清楚起见,我不想从我的应用程序中创建、删除等事件,我只想监视它们,我需要创建新事件的那一刻,以便我可以重新查询提供者。

我知道 Google 有一个(文档很差的)日历 API,有使用它的经验吗?它符合我的需要吗?

【问题讨论】:

    标签: android events calendar android-broadcast


    【解决方案1】:

    this answer to a similar question 中所述,您可以使用BroadcastReceiver 通过以下intent 过滤器创建BroadcastReciver 来接收来自默认Android 日历的更改事件:

    <receiver
       android:name=".NativeEventChangeReceiver">
            <intent-filter>
                <action android:name="android.intent.action.PROVIDER_CHANGED"/>
                <data android:scheme="content"/>
                <data android:host="com.android.calendar"/>
            </intent-filter>
    </receiver>
    

    请注意,此接收器不会传递任何信息 - 您需要在收到该信息后查询日历 API 以查找更改的内容。如果您正在执行可能需要很长时间的操作,您可能需要考虑使用WakefulBroadcastReceiverIntentService 来执行更长的运行过程(因为根据@987654325,BroadcastReceivers 必须在 10 秒内完成@)。

    【讨论】:

    • 不知道PROVIDER_CHANGED 广播。 +1 你的好答案! .当我这个周末实施它时会接受它。谢谢!
    • 如何使这项工作适用于 Android Oreo 及更高版本?我以编程方式尝试过这个,但我没有看到日历更改的任何接收器事件。已经坚持了 3 天了。
    【解决方案2】:
         <receiver android:name=".MyBroadcastReceiver"  android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.EVENT_REMINDER" />
                <data android:scheme="content"/>
                <data android:host="com.android.calendar"/>
            </intent-filter>
        </receiver>
    

    这将触发您的 onReceive()。在您的日历中设置一个事件,并在事件发生前 10 分钟通知。触发只会在通知时间发生

    【讨论】:

      猜你喜欢
      • 2012-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-11
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多