如何在不查看日历的情况下调用活动日历?

时间:2013-02-01 17:01:59

标签: android events android-intent android-calendar

我正在创建一个包含时间表的计划。我的问题是,当我需要创建一个新事件时,我会通过此代码调用该活动。

   public void callEventDialog(int line, int column){
    Intent intent = new Intent(Intent.ACTION_EDIT);
    Calendar c = Calendar.getInstance();
    c.setTimeInMillis(startWeek.getTimeInMillis() + column * DIM + line * 30 * 60 * 1000);
    intent.setType("vnd.android.cursor.item/event");
    intent.putExtra(Events.TITLE, "title");
    intent.putExtra(Events.DTSTART, c.getTimeInMillis());
    intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, c.getTimeInMillis());
    intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, c.getTimeInMillis() + 1800 * 1000);
    intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
    startActivityForResult(intent, 100);
}

但是当我点击确定按钮时,我不想查看日历活动。我只需要注册事件而不是日历并退出。我怎么能这样做? 感谢您的时间和帮助

enter image description here

1 个答案:

答案 0 :(得分:1)

如果您想直接向日历添加活动,则需要使用内容解析程序并请求日历权限 - 不使用日历活动。

清单中的权限:

<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />

将事件放入数据库示例:

public static int insertEventToDb(Context context, Event event, int calendarId) {
    ContentValues values = new ContentValues();

    values.put(Events.CALENDAR_ID, calendarId);
    values.put(Events.TITLE, event.getName());
    values.put(Events.EVENT_LOCATION, event.getLocation());
    values.put(Events.DTSTART, event.getStartDate().getTime());
    values.put(Events.DTEND, event.getEndDate().getTime());
    values.put(Events.DESCRIPTION, event.getDescription());
    values.put(Events.EVENT_TIMEZONE, TimeZone.getTimeZone("GMT+1").getID());

    Uri result = context.getContentResolver().insert(Events.CONTENT_URI, values);
    int eventId = Integer.valueOf(result.getPathSegments().get(1));
    return eventId;
}

您还需要要将数据插入的日历的ID。您可以通过使用SQLite查询来查找它或创建自己的日历(应该只通过SyncAdapter完成)。这是另一个例子,您可能需要根据需要对其进行修改(Constants.ACCOUNT_TYPE是我的自定义):

Uri uri = Calendars.CONTENT_URI.buildUpon()
                .appendQueryParameter(android.provider.CalendarContract.CALLER_IS_SYNCADAPTER, "true")
                .appendQueryParameter(Calendars.ACCOUNT_NAME, "LOCAL")
                .appendQueryParameter(Calendars.ACCOUNT_TYPE, Constants.ACCOUNT_TYPE).build();
Cursor cursor = context.getContentResolver().query(uri, new String[] {Calendars._ID}, null, null, null);

您可以在Android Developers site - Calendar Provider找到更多信息。