2014-01-16 5 views
6

В основном мне нужно реагировать в зависимости от событий в календаре Android по умолчанию (Google).Слушайте новые события календаря

Довольно легко запросить поставщика и получить события в любой момент времени, но мои данные должны быть постоянными. Я хочу, чтобы избежать запроса провайдера каждые x мин для проверки новых событий.

Я не смог найти системную широковещательную рассылку, когда приложение сохраняет новое событие (только при срабатывании события). Чтобы быть ясным, я не хочу создавать, удалять и т. Д. Из своего приложения, я просто хочу их контролировать, мне нужен момент создания нового события, чтобы я мог запросить поставщика.

Я знаю, что у Google есть (очень плохо документированный) API календаря, любой опыт с ним? Соответствует ли это моим потребностям?

ответ

8

Как объяснено в this answer to a similar question, вы можете использовать BroadcastReceiver получать изменения события из календаря по умолчанию в Android, создавая BroadcastReciver со следующим умысел фильтром:

<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-интерфейс календаря после получения этого, чтобы найти то, что изменилось. Если вы выполняете операцию, которая может занять много времени, вы можете рассмотреть возможность использования WakefulBroadcastReceiver и IntentService для выполнения более длительной работы (так как BroadcastReceiver s должен быть завершен в течение 10 секунд в соответствии с 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 минут до события. Триггер будет выполняться ТОЛЬКО в момент уведомления

Смежные вопросы