获取日历提供程序事件时出现重复问题

时间:2018-03-05 09:40:04

标签: android android-calendar

同样的事件正在重复当我从Calendar Provider获取事件列表。此外,我可以在默认日历应用程序(不是谷歌日历应用程序)中看到相同的问题。但该事件仅在谷歌日历应用程序中显示一次。我已调试代码,我可以发现每个重复的事件都有其唯一的事件ID,所以我无法过滤它们。

我正在使用此代码段来获取一天的事件

       Uri.Builder eventsUriBuilder = 
       CalendarContract.Instances.CONTENT_URI.buildUpon();
       ContentUris.appendId(eventsUriBuilder, Long.MIN_VALUE);
       ContentUris.appendId(eventsUriBuilder, Long.MAX_VALUE);

        Uri eventsUri = eventsUriBuilder.build();
        Cursor cursor = context.getContentResolver().query(
                eventsUri,
                new String[]{CalendarContract.Instances.CALENDAR_ID, 
                CalendarContract.Instances.TITLE,
                CalendarContract.Instances.DESCRIPTION, 
                CalendarContract.Instances.BEGIN,
                CalendarContract.Instances.END, 
                CalendarContract.Instances.EVENT_LOCATION,
                CalendarContract.Instances.ALL_DAY, 
                CalendarContract.Instances.START_DAY, 
                CalendarContract.Instances.END_DAY, 
                CalendarContract.Instances.START_MINUTE},
                "((" + CalendarContract.Instances.BEGIN + " >= " + 
                Long.toString(startTime.getTimeInMillis()) + " AND " + 
                CalendarContract.Instances.BEGIN
                        + " <= " + 
                (Long.toString(endTime.getTimeInMillis())) + ") OR "

                        + "(" + CalendarContract.Instances.END + " >= " + 
       Long.toString(startTime.getTimeInMillis()) + " AND " + CalendarContract.Instances.END
                        + " <= " + (Long.toString(endTime.getTimeInMillis())) + ") OR "
                        + "(" + CalendarContract.Instances.BEGIN + " <= " + Long.toString(startTime.getTimeInMillis()) + " AND " + CalendarContract.Instances.END
                        + " >= " + (Long.toString(endTime.getTimeInMillis())) + ")) "

                        + " AND " + CalendarContract.Instances.VISIBLE + " = 1"
                        + " AND calendar_id != " + getCalendarId(context),
                null,
                CalendarContract.Instances.BEGIN + " ASC");

0 个答案:

没有答案