Я запрашиваю таблицу CalendarContract.Instances, чтобы прочитать все экземпляры событий календаря за интервал времени (curr_time, next_time), как показано в коде ниже. Этот код работает, когда записи календаря были вокруг некоторое время. Однако, если я добавляю новую запись, изменяю существующую запись или удаляю ее, я получаю некоторые старые / устаревшие записи (например, новая запись не возвращается, когда она должна быть, или неизмененная / удаленная запись все еще возвращается), и это происходит последовательно. Эта проблема возникает на моем телефоне (Samsung S7), но не возникает на эмуляторе Android. Мне интересно, видел ли кто-то еще эту проблему, или что я могу делать неправильно. Любая помощь приветствуется. Спасибо.
try {
Uri.Builder builder = Instances.CONTENT_URI.buildUpon();
ContentUris.appendId(builder, curr_time);
ContentUris.appendId(builder, next_time);
String[] INSTANCE_PROJECTION = new String[]{Instances.EVENT_ID,
Instances.TITLE, Instances.BEGIN, Instances.END};
Uri uri = builder.build();
cur = cr.query(uri, INSTANCE_PROJECTION, null, null,null);
if (cur != null) {
while (cur.moveToNext()) {
String id = cur.getString(cur.getColumnIndex(Instances.EVENT_ID));
String title = cur.getString(cur.getColumnIndex(Instances.TITLE));
long start = cur.getLong(cur.getColumnIndex(Instances.BEGIN));
long end = cur.getLong(cur.getColumnIndex(Instances.END));
Calendar calendar = Calendar.getInstance();
DateFormat formatter = SimpleDateFormat
.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
calendar.setTimeInMillis(start);
Date start_date = calendar.getTime();
calendar.setTimeInMillis(end);
Date end_date = calendar.getTime();
Log.i(log_tag, "Event: " + id + "\t" + title + "\t" +
start + " " + formatter.format(start_date) + "\t" +
end + " " + formatter.format(end_date));
}
}
} catch (SecurityException e) {
// no permission to read calendars
} finally {
if (cur != null)
cur.close();
}