0

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

   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);
}

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

在此处输入图像描述

4

1 回答 1

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 开发者网站 - Calendar Provider上找到更多信息。

于 2013-02-01T17:14:58.020 回答