2012-07-20 86 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