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

自动将事件添加到Android默认日历,android,events,calendar,Android,Events,Calendar,我正在尝试将新事件插入默认日历。到目前为止,我尝试了两种方法: 1。添加日历事件(但不显示在默认日历应用程序上) 代码使用的是如下所示的某种类型 ContentValues event = new ContentValues(); event.put(CalendarContract.Events.CALENDAR_ID, calID); event.put(CalendarContract.Events.TITLE, ap

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

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 = 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);
我真正想做的是将这两种方法结合起来,生成一个自动插入日历事件到日历应用程序中,如果日历事件打开,则该事件已经存储,并且可以通过默认日历应用程序查看

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

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


您是否已将清单文件的权限设置为写入日历?是的。日历事件实际上已存储,但我在日历应用程序上看不到它。我检查了日历,但该事件未显示。我希望日历应用程序与我的应用程序同步,因此我的应用程序存储的任何事件都将显示在日历应用程序上。这也是我在应用程序中所做的。在这种情况下,我的应用程序也是如此。但无论如何,感谢您的确认,谢谢。:)@MF6265 McAllendar您的应用程序中是否有CalendarView ID?我尝试了相同的方法,但没有在我的应用程序中添加任何内容calendar@Ashok它是完成日历项的日历的id。代码现在已经很旧了,我不确定它是否仍然像预期的那样工作