android 日历开发

Android平台提供了Calendar类和CalendarContract类,用于对日历进行操作和管理。其中,Calendar类是Android系统提供的日历操作类,而CalendarContract类是Android系统提供的日历内容提供者。

1. Calendar类

Calendar类是Android系统提供的日历操作类,它提供了一些方法,可以用来创建、查询、修改和删除日历事件。下面是一些常用的方法:

1)创建一个新的日历事件

```

Calendar cal = Calendar.getInstance();

cal.set(2022, 4, 1, 10, 30);

long start = cal.getTimeInMillis();

cal.set(2022, 4, 1, 11, 30);

long end = cal.getTimeInMillis();

Intent intent = new Intent(Intent.ACTION_INSERT)

.setData(CalendarContract.Events.CONTENT_URI)

.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, start)

.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end)

.putExtra(CalendarContract.Events.TITLE, "Meeting")

.putExtra(CalendarContract.Events.DESCRIPTION, "Discuss project status")

.putExtra(CalendarContract.Events.EVENT_LOCATION, "Office")

.putExtra(CalendarContract.Events.AVAILABILITY, CalendarContract.Events.AVAILABILITY_BUSY);

startActivity(intent);

```

2)查询日历事件

```

Cursor cursor = getContentResolver().query(CalendarContract.Events.CONTENT_URI, null, null, null, null);

while (cursor.moveToNext()) {

String title = cursor.getString(cursor.getColumnIndex(CalendarContract.Events.TITLE));

String description = cursor.getString(cursor.getColumnIndex(CalendarContract.Events.DESCRIPTION));

String location = cursor.getString(cursor.getColumnIndex(CalendarContract.Events.EVENT_LOCATION));

long start = cursor.getLong(cursor.getColumnIndex(CalendarContract.Events.DTSTART));

long end = cursor.getLong(cursor.getColumnIndex(CalendarContract.Events.DTEND));

Log.d(TAG, "title: " + title + ", description: " + description + ", location: " + location + ", start: " + start + ", end: " + end);

}

cursor.close();

```

3)修改日历事件

```

ContentValues values = new ContentValues();

values.put(CalendarContract.Events.TITLE, "Updated Meeting");

values.put(CalendarContract.Events.DESCRIPTION, "Discuss project status and budget");

Uri updateUri = ContentUris.withAppendedId(CalendarContract.Events.CONTENT_URI, eventId);

int rows = getContentResolver().update(updateUri, values, null, null);

```

4)删除日历事件

```

Uri deleteUri = ContentUris.withAppendedId(CalendarContract.Events.CONTENT_URI, eventId);

int rows = getContentResolver().delete(deleteUri, null, null);

```

2. CalendarContract类

CalendarContract类是Android系统提供的日历内容提供者,它提供了一些常量和URI,用于访问日历数据。下面是一些常用的常量和URI:

1)日历常量

```

CalendarContract.Calendars._ID

CalendarContract.Calendars.ACCOUNT_NAME

CalendarContract.Calendars.ACCOUNT_TYPE

CalendarContract.Calendars.CALENDAR_DISPLAY_NAME

CalendarContract.Calendars.CALENDAR_COLOR

CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL

```

2)日历URI

```

CalendarContract.Calendars.CONTENT_URI

CalendarContract.Events.CONTENT_URI

CalendarContract.Instances.CONTENT_URI

```

3)查询日历事件

```

Cursor cursor = getContentResolver().query(CalendarContract.Events.CONTENT_URI, null, null, null, null);

while (cursor.moveToNext()) {

String title = cursor.getString(cursor.getColumnIndex(CalendarContract.Events.TITLE));

String description = cursor.getString(cursor.getColumnIndex(CalendarContract.Events.DESCRIPTION));

String location = cursor.getString(cursor.getColumnIndex(CalendarContract.Events.EVENT_LOCATION));

long start = cursor.getLong(cursor.getColumnIndex(CalendarContract.Events.DTSTART));

long end = cursor.getLong(cursor.getColumnIndex(CalendarContract.Events.DTEND));

Log.d(TAG, "title: " + title + ", description: " + description + ", location: " + location + ", start: " + start + ", end: " + end);

}

cursor.close();

```

4)插入日历事件

```

ContentValues values = new ContentValues();

values.put(CalendarContract.Events.DTSTART, start);

values.put(CalendarContract.Events.DTEND, end);

values.put(CalendarContract.Events.TITLE, "Meeting");

values.put(CalendarContract.Events.DESCRIPTION, "Discuss project status");

values.put(CalendarContract.Events.EVENT_LOCATION, "Office");

values.put(CalendarContract.Events.CALENDAR_ID, calendarId);

Uri uri = getContentResolver().insert(CalendarContract.Events.CONTENT_URI, values);

long eventId = Long.parseLong(uri.getLastPathSegment());

```

5)更新日历事件

```

ContentValues values = new ContentValues();

values.put(CalendarContract.Events.TITLE, "Updated Meeting");

values.put(CalendarContract.Events.DESCRIPTION, "Discuss project status and budget");

Uri updateUri = ContentUris.withAppendedId(CalendarContract.Events.CONTENT_URI, eventId);

int rows = getContentResolver().update(updateUri, values, null, null);

```

6)删除日历事件

```

Uri deleteUri = ContentUris.withAppendedId(CalendarContract.Events.CONTENT_URI, eventId);

int rows = getContentResolver().delete(deleteUri, null, null);

```

总结:

Android平台提供了Calendar类和CalendarContract类,用于对日历进行操作和管理。其中,Calendar类是Android系统提供的日历操作类,而CalendarContract类是Android系统提供的日历内容提供者。开发者可以根据自己的需求,使用这些类提供的方法和常量,实现日历功能。