Как получить все события двух календарей в Android

В моем приложении я использую два календаря, скажем, календарь "бизнес" с CalendarContract.Events.CALENDAR_ID = 1и календарь "приват" с CalendarContract.Events.CALENDAR_ID = 2,

Если пользователь выбирает для просмотра события обоих календарей в моем приложении, мне нужно каким-то образом поместить события обоих календарей в курсор.

Я попробовал это, как в следующем коде, где я поместил в свой выбор оба CalendarIds с OR, но это показывает мне невероятное количество событий.

Итак, мой вопрос, как получить курсор с событиями двух календарей?

String[] projection = { CalendarContract.Events._ID,
            CalendarContract.Events.CALENDAR_ID,
            CalendarContract.Events.TITLE,
            CalendarContract.Events.DESCRIPTION,
            CalendarContract.Events.DTSTART, CalendarContract.Events.DTEND,
            CalendarContract.Events.DURATION,
            CalendarContract.Events.DELETED };

SelectionArgs = new String[] { strCalendarStart,
                        strCalendarStop, "0",
                        intPrivateCalendarId.toString(),
                        intBeruflicheCalendarId.toString() };

selection = "((" + CalendarContract.Events.DTSTART + " >= ?) AND (" 
                        + CalendarContract.Events.DTEND + " <= ?)AND " + "("
                        + CalendarContract.Events.DELETED + " = ?) AND"
                        + "(" + CalendarContract.Events.CALENDAR_ID
                        + " = ?) OR" + "("
                        + CalendarContract.Events.CALENDAR_ID + " = ?))";

Cursor curCalendar = cr.query( CalendarContract.Events.CONTENT_URI,
                               projection, selection, SelectionArgs,
                               CalendarContract.Events.DTSTART + " ASC" );

1 ответ

Вы пытались добавить скобки вокруг OR как это?

selection = "((" + CalendarContract.Events.DTSTART + " >= ?) AND (" 
                        + CalendarContract.Events.DTEND + " <= ?)AND " + "("
                        + CalendarContract.Events.DELETED + " = ?) AND"
                        + "((" + CalendarContract.Events.CALENDAR_ID
                        + " = ?) OR" + "(" 
                        + CalendarContract.Events.CALENDAR_ID + " = ?)))";

Так как я думаю ORимеет более низкий приоритет, ваш код будет возвращать события, не удаленные и т. д. из календаря 1, и все события из календаря 2.

Я не совсем уверен, но, возможно, стоит попробовать. Я надеюсь, что этот ответ может помочь. Хорошего дня.

Другие вопросы по тегам