我正在尝试将新事件插入默认日历。到目前为止,我尝试了两种方法:
1。添加日历事件(但未在默认日历应用中显示)
代码使用类似下面的某些内容
ContentValues event = new ContentValues();
event.put(CalendarContract.Events.CALENDAR_ID, calID);
event.put(CalendarContract.Events.TITLE, appointment.mTitle);
event.put(CalendarContract.Events.DESCRIPTION, appointment.mDescription);
event.put(CalendarContract.Events.EVENT_LOCATION, appointment.mAddress);
event.put(CalendarContract.Events.DTSTART, appointment.mStartTime);
event.put(CalendarContract.Events.DTEND, appointment.mEndTime);
event.put(CalendarContract.Events.ALL_DAY, 0); // 0 for false, 1 for true
event.put("eventStatus", 1); // 0 for tentative, 1 for confirmed, 2 for canceled
event.put(CalendarContract.Events.HAS_ALARM, 1); // 0 for false, 1 for true
event.put(CalendarContract.Events.EVENT_TIMEZONE, TZone.getJavaTimeZoneId(appointment.mTZone));
Uri url = getContentResolver().insert(eventUri, event);
2。使用打开日历应用程序的Intent
尽管这打开了日历应用程序,但它没有自动存储。用户需要单击“保存”按钮进行存储。
Intent intent = new Intent(Intent.ACTION_INSERT)
.setData(Events.CONTENT_URI)
.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, appointment.getStartOfCompleteDateAndTimeOfEvent())
.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, appointment.getEndOfCompleteDateAndTimeOfEvent())
.putExtra(Events.TITLE, appointment.mTitle)
.putExtra(Events.DESCRIPTION, appointment.mDescription)
.putExtra(Events.EVENT_LOCATION, appointment.mAddress)
;
startActivity(intent);
我真正想要做的是将这两种方法结合起来,以便在日历应用中自动插入日历事件,如果日历事件打开,则事件已经存储,可以通过默认日历应用查看。
如果有人知道,请帮助。非常感谢。
答案 0 :(得分:1)
private void insertEntry(String pTitle, String pDescription, String pLocation, long pStartTimestamp, long pEndTimestamp) {
ContentValues values = new ContentValues();
ContentResolver mContentResolver = mContext.getContentResolver();
values.put(Events.CALENDAR_ID, mCalendarID);
values.put(Events.TITLE, pTitle);
values.put(Events.DESCRIPTION, pDescription);
values.put(Events.EVENT_LOCATION, pLocation);
values.put(Events.DTSTART, pStartTimestamp);
values.put(Events.DTEND, pEndTimestamp);
values.put(Events.HAS_ALARM, 1); // 0 for false, 1 for true
values.put(Events.EVENT_TIMEZONE, TimeZone.getDefault().getDisplayName()); //get the Timezone
Uri uri = mContentResolver.insert(Events.CONTENT_URI, values);
Log.i(TAG,"calendar entry inserted");
}
此代码适用于我。
您必须确保您的应用程序具有对日历具有读写权限的权限。只需将其添加到您的清单中:
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />