自动将事件添加到Android默认日历

时间:2015-02-20 18:13:26

标签: android events calendar

我正在尝试将新事件插入默认日历。到目前为止,我尝试了两种方法:

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);

我真正想要做的是将这两种方法结合起来,以便在日历应用中自动插入日历事件,如果日历事件打开,则事件已经存储,可以通过默认日历应用查看。

如果有人知道,请帮助。非常感谢。

1 个答案:

答案 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" />