0

我想通过意图插入一个日历事件。但是“添加事件”-Activity 不应预先填充提醒/警报。

Intent intent = new Intent(Intent.ACTION_INSERT)
    .setData(Events.CONTENT_URI)
    .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis())
    .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis())
    .putExtra(Events.TITLE, title)
    .putExtra(Events.DESCRIPTION, description)
    .putExtra(Events.HAS_ALARM, false)
    .putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, true);

这个意图将启动日历的“添加事件”——预先填充了一些数据的活动。但是,尽管我设置Events.HAS_ALARM为 false,但该活动已预先填充了提醒(在 Android ICS 上测试)。

更糟糕的是,提醒是在活动开始前 10 分钟预先填充的,如果是全天活动,这真的很糟糕。谁想在第二天晚上 11.50 点收到提醒?

我在这里缺少什么?

4

2 回答 2

6

我从来没有尝试过你上面的技术。这是我用来保存日历的代码片段。

public static void saveCalendar(Context ctx, String title,
        String description, String location, Calendar cal_start,
        Calendar cal_end) {

    // look for calendar
    Cursor cursor = ctx.getContentResolver()
            .query(Uri.parse("content://com.android.calendar/calendars"),
                    new String[] { "_id", "displayname" }, "selected=1",
                    null, null);
    cursor.moveToFirst();
    String[] CalNames = new String[cursor.getCount()];
    int[] CalIds = new int[cursor.getCount()];
    for (int i = 0; i < CalNames.length; i++) {
        CalIds[i] = cursor.getInt(0);
        CalNames[i] = cursor.getString(1);
        cursor.moveToNext();
    }

    cursor.close();

    // put calendar event
    ContentValues event = new ContentValues();
    event.put("calendar_id", CalIds[0]);
    event.put("title", title);
    event.put("description", description);
    event.put("eventLocation", location);
    event.put("dtstart", cal_start.getTimeInMillis());
    event.put("dtend", cal_end.getTimeInMillis());
    event.put("hasAlarm", 1);

    Uri eventsUri = Uri.parse("content://com.android.calendar/events");
    Uri newEvent = ctx.getContentResolver().insert(eventsUri, event);

    // put alarm reminder for an event, 2 hours prior
    long eventID = Long.parseLong(newEvent.getLastPathSegment());

    ContentValues cv_alarm = new ContentValues();
    cv_alarm.put("event_id", eventID);
    cv_alarm.put("method", 1);
    cv_alarm.put("minutes", 120);
    ctx.getContentResolver()
            .insert(Uri.parse("content://com.android.calendar/reminders"),
                    cv_alarm);

}

如果您不希望警报/提醒设置为 0 到 hasAlarm 并且不要放置代码来添加警报。这个对我有用。

于 2012-07-20T20:08:54.523 回答
3

HAS_ALARM 列需要 0 或 1 的整数布尔值。

intent.putExtra(Events.HAS_ALARM, 0);
于 2014-01-15T17:24:01.887 回答