您需要查询
CalendarProvider(自API级别14以来可用)的日历表以获取可用日历.以下代码段将向您展示如何:
final String[] EVENT_PROJECTION = new String[]{
CalendarContract.Calendars._ID,
CalendarContract.Calendars.CALENDAR_DISPLAY_NAME,
CalendarContract.Calendars.CALENDAR_COLOR
};
final ContentResolver cr = getContentResolver();
final Uri uri = CalendarContract.Calendars.CONTENT_URI;
Cursor cur = cr.query(uri, EVENT_PROJECTION, null, null, null);
final List result = Lists.newArrayList();
while (cur.moveToNext()) {
/* do something with the cursor:
Long id = cur.getLong(0);
String name = cur.getString(1);
int color = cur.getInt(2);
*/
}
由于您正在进行IO工作(提供程序基本上是SQLite数据库),因此将所有内容包装到单独的(非UI)线程中是一个可靠的想法;我会去RxJava.
如果您不喜欢使用游标,查询和样板代码,请使用CalendarWrapper库.它负责映射对象和数据库行,CRUD操作可以使用对象方法执行.例如,在你的情况下,一行就能发挥作用:
final List calendars = Calendar.getCalendarsForQuery(null, null, null, getContentResolver());
掌握了可用的日历后,只需将它们放入列表并在对话框中显示,这是最简单的方法.