自动将事件添加到Android默认日历
我正在尝试将新事件插入默认日历。到目前为止,我尝试了两种方法: 1。添加日历事件(但不显示在默认日历应用程序上) 代码使用的是如下所示的某种类型自动将事件添加到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
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。代码现在已经很旧了,我不确定它是否仍然像预期的那样工作