Dzięki ICS mamy teraz interfejsy API dla kalendarza! :)Jaki jest najlepszy sposób na obsługę aktualizacji, gdy kalendarz synchronizuje nowe zdarzenia?
Moje pytanie brzmi: jak ustalimy, czy wydarzenie zostało zaktualizowane. Najlepiej byłoby to zrobić za pomocą BroadcastReceiver, ale nie sądzę, że jest publicznie dostępny. Wydarzenie jest transmitowane, ale nie sądzę, aby było dostępne dla aplikacji niesystemowych.
02-06 23:05:05.316: I/CalendarProvider2(9201): Sending notification intent: Intent { act=android.intent.action.PROVIDER_CHANGED dat=content://com.android.calendar }
02-06 23:05:05.320: W/ContentResolver(9201): Failed to get type for: content://com.android.calendar (Unknown URL content://com.android.calendar)
To jest moja praca na teraz. Czy istnieje lepszy sposób? Użytkownicy widzą usługę działającą przez dłuższy czas i często ją zabijają, aby oszczędzać baterię.
public class CalendarUpdatedService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
int returnValue = super.onStartCommand(intent, flags, startId);
getContentResolver().registerContentObserver(
CalendarContract.Events.CONTENT_URI, true, observer);
return returnValue;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
ContentObserver observer = new ContentObserver(new Handler()) {
@Override
public boolean deliverSelfNotifications() {
return true;
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
//code goes here to update
}
};
}
Świetna robota wokół teraz. – Adam
z jakiegoś powodu, za każdym razem, gdy utworzę wydarzenie w kalendarzu, otrzymuję powiadomienie wiele razy. dlaczego to się dzieje? –