2014-01-16 36 views
6

主要是我需要的是根據默認安卓日曆(Google)中的事件做出反應。收聽新的日曆事件

查詢提供程序並在任何給定時間獲取事件相當容易,但我的數據必須始終保持一致。 我想要的是避免查詢提供者每x分鐘檢查新事件。

我找不到任何應用程序存儲新事件時的系統廣播(僅當事件被觸發時)。 只是要清楚,我不想從我的應用程序創建,刪除等事件,我只是想監視它們,我需要創建新事件的時刻,以便我可以重新查詢提供程序。

我知道谷歌有一個(很差的文件)日曆API,有任何經驗嗎?它適合我的需求嗎?

回答

8

this answer to a similar question解釋的,可以使用BroadcastReceiver通過創建具有以下意圖過濾器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後查詢日曆API,以查找發生了什麼變化。如果您正在進行可能需要很長時間的操作,則可能需要考慮使用WakefulBroadcastReceiverIntentService來執行較長時間的運行過程(因爲BroadcastReceiver必須在012秒內完成,時間爲onReceive() documentation)。

+0

不知道有關「PROVIDER_CHANGED」廣播。 +1爲您的偉大答案! 。我將在本週末實施時接受它。謝謝! – MariusBudin

+0

它的工作原理!大! – MariusBudin

1
 <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分鐘通知您在日曆中設置EVENT。觸發器將僅在通知時發生