2014-01-16 13 views
6

Hauptsächlich muss ich reagieren, abhängig von den Ereignissen im Standard-Android-Kalender (Google).Auf neue Kalenderereignisse warten

Es ist ziemlich einfach, den Anbieter abzufragen und die Ereignisse zu jeder Zeit zu erhalten, aber meine Daten müssen die ganze Zeit konsistent sein. Was ich will, ist zu vermeiden, den Anbieter jede x min abzufragen, um nach neuen Ereignissen zu suchen.

Ich konnte keine Systemübertragung finden, wenn die App das neue Ereignis speichert (nur wenn das Ereignis ausgelöst wird). Nur um klar zu sein, ich möchte nicht, Ereignisse von meiner App zu erstellen, zu löschen, ich möchte nur sie überwachen, ich brauche den Moment der Erstellung eines neuen Ereignisses, so dass ich den Anbieter erneut anfragen kann.

Ich weiß, Google hat eine (sehr schlecht dokumentiert) Kalender-API, keine Erfahrung damit? Passt es meinen Bedürfnissen?

Antwort

8

Wie in this answer to a similar question Sie ein BroadcastReceiver können Änderungsereignisse aus dem Standard-Android-Kalender erhalten, indem ein BroadcastReciver mit folgenden Intent-Filter zu erstellen:

<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> 

Beachten Sie, dass keine Informationen zusammen mit diesem Empfänger übergeben werden - Sie müssen die Kalender-API nach Erhalt dieser Anfrage abfragen, um herauszufinden, was sich geändert hat. Wenn Sie eine Operation ausführen, die lange dauern kann, sollten Sie die Verwendung eines WakefulBroadcastReceiver und eines IntentService in Betracht ziehen, um den länger laufenden Prozess auszuführen (wie onReceive() documentationBroadcastReceiver s innerhalb von 10 Sekunden abgeschlossen sein müssen).

+0

stattfinden Wusste nicht über die 'PROVIDER_CHANGED' Sendung. +1 für deine großartige Antwort! . Werde es akzeptieren, wenn ich es dieses Wochenende umsetze. Vielen Dank! – MariusBudin

+0

Es funktioniert! Groß! – 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> 

Dies wird Ihr onReceive() auslösen. Legen Sie ein Ereignis in Ihrem Kalender mit einer 10-minütigen Benachrichtigung vor dem Ereignis fest. Der Auslöser wird NUR zur Benachrichtigungszeit