阅读两个日期之间的日历事件



我正在尝试读取两个日期之间的日历事件。

我用谷歌开发者的例子(https://developer.android.com/guide/topics/providers/calendar-provider),但它不起作用。

当然,我在要求的日期有活动。

如果我读取了日历中的所有事件,那么它正在工作,所以(坏的(解决方案是检查每个返回的事件是否包含在间隔中。。。

这是我的代码:

final String[] EVENT_PROJECTION = new String[]{
CalendarContract.Events._ID,
CalendarContract.Events.TITLE,
CalendarContract.Events.DTSTART,
CalendarContract.Events.DTEND,
};
final int PROJECTION_ID_INDEX = 0;
final int PROJECTION_TITLE_INDEX = 1;
final int PROJECTION_DTSTART_INDEX = 2;
final int PROJECTION_DTEND_INDEX = 3;
Calendar beginTime = Calendar.getInstance();
beginTime.set(2020, 3, 18, 0, 0);
long startMillis = beginTime.getTimeInMillis();
Calendar endTime = Calendar.getInstance();
endTime.set(2020, 3, 24, 0, 0);
long endMillis = endTime.getTimeInMillis();
Uri.Builder builder = CalendarContract.Instances.CONTENT_URI.buildUpon();
ContentUris.appendId(builder, startMillis);
ContentUris.appendId(builder, endMillis);
String selection = CalendarContract.Instances.CALENDAR_ID + " = " + calID;
if (ActivityCompat.checkSelfPermission(this, permission.READ_CALENDAR) == PackageManager.PERMISSION_GRANTED) {
ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(builder.build(), EVENT_PROJECTION, selection, null, null);
if (cursor != null) {
while (cursor.moveToNext()) {
Log.i (TAG, "ID=" + cursor.getLong(PROJECTION_ID_INDEX) + " Title=" + cursor.getString(PROJECTION_TITLE_INDEX));
}
cursor.close();
}
}

生成器已正确初始化(类似于:"content://com.android.calendar/instances/when/1584486000000/1584918000000"(

下面的代码返回日历的所有事件:

Cursor eventCursor = cr.query(CalendarContract.Events.CONTENT_URI, EVENT_PROJECTION, selection, null, null);

我尝试了很多方法,但仍然没有结果。。。

有人知道它为什么会失败?

感谢

这是解决方案,而不是来自谷歌的代码。。。

final String[] EVENT_PROJECTION = new String[]{
CalendarContract.Events._ID,
CalendarContract.Events.TITLE,
CalendarContract.Events.DTSTART,
CalendarContract.Events.DTEND,
};
final int PROJECTION_ID_INDEX = 0;
final int PROJECTION_TITLE_INDEX = 1;
final int PROJECTION_DTSTART_INDEX = 2;
final int PROJECTION_DTEND_INDEX = 3;
Calendar beginTime = Calendar.getInstance();
beginTime.set(2020, 3, 18, 0, 0);
long startMillis = beginTime.getTimeInMillis();
Calendar endTime = Calendar.getInstance();
endTime.set(2020, 3, 24, 0, 0);
long endMillis = endTime.getTimeInMillis();
String where = "((dtstart >= " + startMillis + ") AND (dtstart <= " + endMillis + ") AND (calendar_id = " + calID + "))";
if (ActivityCompat.checkSelfPermission(this, permission.READ_CALENDAR) == PackageManager.PERMISSION_GRANTED) {
ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(Events.CONTENT_URI, projection, where, null, null);
if (cursor != null) {
while (cursor.moveToNext()) {
Log.i (TAG, "ID=" + cursor.getLong(PROJECTION_ID_INDEX) + " Title=" + cursor.getString(PROJECTION_TITLE_INDEX));
}
cursor.close();
}
}

最新更新