Слушайте изменения календаря Android. (Синхронизировать/Удалить/Вставить и т.д..)

Я понимаю, что мне нужно использовать Content Provider, чтобы получить все изменения, но я также понял, начиная с API14, что есть готовый Content Provider для календаря, который я могу использовать для прослушивания вместо того, чтобы «создавать» свой собственный.
Есть ли там? где-нибудь я могу увидеть пример этого?
Может ли кто-нибудь опубликовать ядро ​​этого слушателя?

Спасибо


person SagiLow    schedule 16.11.2013    source источник


Ответы (1)


Сначала вам нужно добавить этот тип получателя в манифест:

    <receiver android:name="your.package.name.CatchChangesReceiver"
        android:priority="1000" >
        <intent-filter>
            <action android:name="android.intent.action.PROVIDER_CHANGED" />
            <data android:scheme="content" />
            <data android:host="com.android.calendar" />
        </intent-filter>
    </receiver>

Затем создайте простой класс, расширяющий широковещательный приемник:

public class CatchChangesReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
    // add processing here with some query to content provider
        // in my project I use this selection for getting events:
         final String SELECTION = CalendarContract.Events.CALENDAR_ID + "="
            + calendarId + " AND " + "("
            + CalendarContract.Events.DIRTY + "=" + 1 + " OR "
            + CalendarContract.Events.DELETED + "=" + 1 + ")" + " AND "
            + CalendarContract.Events.DTEND + " > "
            + Calendar.getInstance().getTimeInMillis();
    }
}
person yurezcv    schedule 16.11.2013
comment
Спасибо! Прекрасно работает ! - person SagiLow; 16.11.2013
comment
В противном случае это невозможно получить из документации, поэтому большое спасибо за понимание. - person Alex.F; 18.05.2015
comment
Могу ли я получить полный пример? - person Nikita; 17.08.2015
comment
@yurezcv: я новичок в разработке для Android, как я могу зарегистрировать службу BroadReceiver? - person Vineesh TP; 05.02.2016
comment
Это всегда работало для меня при использовании устройств Samsung. Сейчас я купил Asus Zenfone Max и установил на него свое приложение. Все функции работают, кроме прослушивателя событий календаря. Почему? На моих устройствах Samsung в качестве приложения «Календарь» был установлен S Planner, но на устройстве Asus установлен Календарь Google. Должно ли это иметь значение? - person user3289695; 29.09.2016
comment
Не всегда работает при удалении повторяющихся экземпляров события (не всего события). Невозможно идентифицировать события, которые изменились. - person Vlad; 23.02.2018