在Android事件创建意图中指定日历

时间:2016-03-18 07:54:12

标签: android android-intent android-calendar

我通过以下代码触发创建日历事件:

Intent intent = new Intent(Intent.ACTION_INSERT);
intent.setData(CalendarContract.Events.CONTENT_URI);
startActivity(intent);

但是我想指定哪个日历应该用于事件创建(即在事件创建屏幕中设置日历下拉列表的初始值)。

我试图提供ACCOUNT_TYPEACCOUNT_NAMECALENDAR_ID

intent.putExtra(CalendarContract.Events.ACCOUNT_TYPE, accountType);
intent.putExtra(CalendarContract.Events.ACCOUNT_NAME, accountName);
intent.putExtra(CalendarContract.Events.CALENDAR_ID, calendarId);

但它对日历下拉列表初始值没有影响。

是否可以在事件创建意图中指定日历?

3 个答案:

答案 0 :(得分:4)

我相信,只有Intent才能实现这一目标。您可能会遇到各种可能支持或不支持此功能的日历应用程序。

如果您不介意用户无法更改日历,您可以通过简单的方法实现此目的:

只需创建一个"占位符"您想要的日历中的事件(如Android Developer Guide中所述)并为此事件触发Intent.ACTION_EDIT Intent

以下是一些(未经测试的)代码,用于说明这是如何工作的:

ContentResolver cr = getContentResolver();
ContentValues values = new ContentValues();

// provide an initial time
long now=System.currentTimeMillis();
values.put(Events.DTSTART, now);
values.put(Events.DTEND, now+3600000);
values.put(Events.TITLE, "");
values.put(Events.CALENDAR_ID, calendarId);
values.put(Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());

// create the "placeholder" event
Uri uri = cr.insert(Events.CONTENT_URI, values);

// get the event ID that is the last element in the Uri
long eventId = Long.parseLong(uri.getLastPathSegment());

// launch the editor to edit the "placeholder" event
Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setData(ContentUris.withAppendedId(CalendarContract.Events.CONTENT_URI, eventId));
startActivityForResult(intent, 0);

编辑Intent可能不会返回一个状态,告诉您事件是否已保存,或者用户是否在不保存的情况下解除了编辑器。因此,您应该回读事件并检查它是否已被用户修改,如果尚未更改则将其删除。

答案 1 :(得分:0)

使用以下代码段调用默认日历事件。

Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
intent.setType("vnd.android.cursor.item/event");
startActivity(intent);

以下代码包可用于将信息传递给日历意图。

intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, startTime);
intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME,endTime);
intent.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, true);
intent.putExtra(Events.TITLE, "Neel Birthday");
intent.putExtra(Events.DESCRIPTION, "This is a sample description");
intent.putExtra(Events.EVENT_LOCATION, "My Guest House");
intent.putExtra(Events.RRULE, "FREQ=YEARLY");

愿它能帮到你:)谢谢。

来源:How to Add an Event to Device Calendar in Android

您也可以查看这个。 Adding Events to the User’s Calendar

答案 2 :(得分:0)

使用这个简单的方法添加事件很简单。

public void onAddEventClicked(View view) {
        Intent intent = new Intent(Intent.ACTION_INSERT);
        intent.setType("vnd.android.cursor.item/event");

        Calendar cal = Calendar.getInstance();
        long startTime = cal.getTimeInMillis();
        long endTime = cal.getTimeInMillis() + 60 * 60 * 1000;

        intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, startTime); 
        intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime);

        intent.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, true);

        //This is Information about Calender Event.
        intent.putExtra(Events.TITLE, "Siddharth Birthday");
        intent.putExtra(Events.DESCRIPTION, "This is a description");
        intent.putExtra(Events.EVENT_LOCATION, "My Guest House");
        intent.putExtra(Events.RRULE, "FREQ=YEARLY");

        startActivity(intent);
    }