2014-01-16 9 views
6

主に私が必要とするのは、デフォルトのアンドロイドカレンダー(Google)のイベントに応じて対応することです。新しいカレンダーのイベントを聞く

いつでもプロバイダに問い合わせてイベントを取得するのは簡単ですが、データはいつも一貫性がなければなりません。 私が望むのは、x minごとにプロバイダに問い合わせて新しいイベントをチェックするのを避けることです。

アプリが新しいイベントを保存しているとき(イベントが発生したときのみ)のシステムブロードキャストが見つかりませんでした。 私は、アプリケーションからイベントを作成、削除などしたくないだけで、それらを監視したいだけです。新しいイベントの作成の瞬間が必要なので、プロバイダを再クエリすることができます。

私はGoogleに(非常によく書かれていない)カレンダーAPIがあることを知っています。それは私のニーズに合っていますか?

答えて

8

としてはthis answer to a similar questionで説明するには、次のインテントフィルタとBroadcastReciverを作成することにより、デフォルトのAndroidカレンダーから変更イベントを受け取るためにBroadcastReceiverを使用することができます。何も情報がこの受信機と一緒に渡されないことを

<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を使用することを検討してください(onReceive() documentationによれば、BroadcastReceiverは10秒以内に完了する必要があります)。

+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を設定してください。トリガーは通知時にのみ発生します

関連する問題