2012-07-20 87 views
0

我想通过意图插入日历事件。但“添加事件” - 活动不应预先填充提醒/警报。Android插入日历的意图 - 没有警报/提醒

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分的时候提醒?

我在这里失踪了什么?

回答

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,也不要让代码添加警报。这个对我有用。

+0

一个整数布尔你所描述的是如何通过内容提供商插入事件。我考虑过。但我不想走这条路,因为这只是我的应用程序中的一个小功能,并且需要额外的活动才能让用户修改事件,并且超过55%的用户正在运行API 14.从API 14及以上版本开始,您可以通过意向插入事件。此外,通过意图插入事件更适合整个Android生态系统。无论如何。 – mrd 2012-07-20 20:23:57

+0

@Halim:我用过这个例子,是的,它为我工作..但它不工作在4.0以上。你能给我建议我该怎么办? – 2013-06-19 12:22:29

3

列HAS_ALARM预期的0或1

intent.putExtra(Events.HAS_ALARM, 0); 
+0

这不会抑制我的系统上的提醒:(。 – svenmeier 2016-09-07 09:17:59