Android - 如何设置插入具有意图的事件的特定日历

时间:2013-04-04 08:43:42

标签: android android-intent calendar

public static void insertEventWithName(Context ctx, long id, String eventName, String descriptionEvent, Calendar beginTime) {

    intent.putExtra(Events.CALENDAR_ID, (int) id);
    Intent intent = new Intent(Intent.ACTION_INSERT);
    intent.setData(Events.CONTENT_URI);
    intent.putExtra(Events.TITLE, eventName);
    intent.putExtra(Events.DESCRIPTION, descriptionEvent);
    intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME,beginTime.getTimeInMillis());
    intent.putExtra(Events.ACCESS_LEVEL, Events.ACCESS_PRIVATE);
    intent.putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY);
    ctx.startActivity(intent);
}

为了插入事件,我使用此代码,但始终设置上次使用的日历。 我希望看到带有我身份的日历

3 个答案:

答案 0 :(得分:0)

尝试添加日历名称而不是其ID。

 intent.putExtra(CalendarContract.Calendars.ACCOUNT_NAME, "test@gmail.com")

对我来说,它会在打开所选日历应用程序时设置特定日历。

答案 1 :(得分:0)

我可以通过调用intent setData来调用特定日历,如下所示:

intent.setData(buildCalUri());

其中buildCalUri返回用于创建特定日历的URI

public static Uri buildCalUri() {
        return CalendarContract.Calendars.CONTENT_URI.buildUpon()
                .appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true")
                .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_NAME, ACCOUNT_NAME)
                .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_TYPE, ACCOUNT_TYPE).build();

答案 2 :(得分:0)

Intent intent = new Intent(Intent.ACTION_EDIT)
        .setType("vnd.android.cursor.item/event")
        .setData(CalendarContract.Events.CONTENT_URI)
        .putExtra(CalendarContract.Calendars.NAME, APPOINTMENT_CALENDAR_NAME)
        .putExtra(CalendarContract.Calendars.ACCOUNT_NAME, EMAIL)
        .putExtra(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, APPOINTMENT_CALENDAR_NAME)
        .putExtra(CalendarContract.Events.CALENDAR_ID, getCalendarID(EMAIL, APPOINTMENT_CALENDAR_NAME));
startActivity(intent);

尝试提供更多参数以便区分。我也遇到了同样的问题但是当我提供上述细节时,它会重定向到正确的日历。希望它有所帮助。