今天继续讲android的ContentProvider之Calendar,前几节讲了Calendars、Events、Attendees、Reminders,今天讲Instances。
以下是android developer官网的讲解:
实例表
CalendarContract.Instances 表储存事件实例的开始时间和结束时间。 此表中的每一行都表示一个事件实例。 实例表无法写入,只提供查询事件实例的途径。
下表列出了一些您可以执行实例查询的字段。请注意,时区由 KEY_TIMEZONE_TYPE 和 KEY_TIMEZONE_INSTANCES 定义。
常量 | 说明 |
---|---|
BEGIN | 实例的开始时间,以协调世界时毫秒数表示。 |
END | 实例的结束时间,以协调世界时毫秒数表示。 |
END_DAY | 与日历时区相应的实例儒略历结束日。 |
END_MINUTE | 从日历时区午夜开始计算的实例结束时间(分钟)。 |
EVENT_ID | 该实例对应事件的 _ID。 |
START_DAY | 与日历时区相应的实例儒略历开始日。 |
START_MINUTE | 从日历时区午夜开始计算的实例开始时间(分钟)。 |
查询实例表
如需查询实例表,您需要在 URI 中指定查询的时间范围。 在以下示例中,CalendarContract.Instances 通过其 CalendarContract.EventsColumns 接口实现获得对 TITLE 字段的访问权限。换言之,TITLE 是通过数据库视图,而不是通过查询原始 CalendarContract.Instances 表返回的。
private static final String DEBUG_TAG = "MyActivity";
public static final String[] INSTANCE_PROJECTION = new String[] {
Instances.EVENT_ID, // 0
Instances.BEGIN, // 1
Instances.TITLE // 2
};
// The indices for the projection array above.
private static final int PROJECTION_ID_INDEX = 0;
private static final int PROJECTION_BEGIN_INDEX = 1;
private static final int PROJECTION_TITLE_INDEX = 2;
...
// Specify the date range you want to search for recurring
// event instances
Calendar beginTime = Calendar.getInstance();
beginTime.set(2011, 9, 23, 8, 0);
long startMillis = beginTime.getTimeInMillis();
Calendar endTime = Calendar.getInstance();
endTime.set(2011, 10, 24, 8, 0);
long endMillis = endTime.getTimeInMillis();
Cursor cur = null;
ContentResolver cr = getContentResolver();
// The ID of the recurring event whose instances you are searching
// for in the Instances table
String selection = Instances.EVENT_ID + " = ?";
String[] selectionArgs = new String[] {"207"};
// Construct the query with the desired date range.
Uri.Builder builder = Instances.CONTENT_URI.buildUpon();
ContentUris.appendId(builder, startMillis);
ContentUris.appendId(builder, endMillis);
// Submit the query
cur = cr.query(builder.build(),
INSTANCE_PROJECTION,
selection,
selectionArgs,
null);
while (cur.moveToNext()) {
String title = null;
long eventID = 0;
long beginVal = 0;
// Get the field values
eventID = cur.getLong(PROJECTION_ID_INDEX);
beginVal = cur.getLong(PROJECTION_BEGIN_INDEX);
title = cur.getString(PROJECTION_TITLE_INDEX);
// Do something with the values.
Log.i(DEBUG_TAG, "Event: " + title);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(beginVal);
DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");
Log.i(DEBUG_TAG, "Date: " + formatter.format(calendar.getTime()));
}
}