Android Calendar Intent event end always one hour after start

和自甴很熟 提交于 2019-12-11 16:46:58

问题


I've looked into this problem a lot and I can't seem to find anyone having the same difficulties. The start time is working fine but the end time is always set to being exactly one hour after the initial start time of the event.

            Calendar calStart = Calendar.getInstance();
                  calStart.set(2014, 02, 04, 13, 20, 0);

    Calendar calEnd = Calendar.getInstance();
                  calEnd.set(2014, 02, 04, 15, 30, 0);

    Intent intent = new Intent(Intent.ACTION_INSERT)
    .setData(Events.CONTENT_URI)
     .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, calStart.getTimeInMillis())     
    .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, calEnd.getTimeInMillis())
    .putExtra(Events.EVENT_TIMEZONE, TimeZone.getDefault().getID())
    .putExtra(Events.TITLE, "TEST")
    .putExtra(Events.EVENT_LOCATION, "Location")
    .putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY);

     startActivity(intent);

回答1:


I fixed it my using a different implementation.

 public void setAlarm(Date examMonth, int day, int hourOfDay, int minute,
        double length, String examName, String venue) {


    Calendar calSet = Calendar.getInstance();
    calSet.setTime(examMonth);
    int month = calSet.get(Calendar.MONTH);
    int year = Calendar.getInstance().get(Calendar.YEAR);
    calSet.set(year, month, day, hourOfDay, minute, 0); 



     // look for calendar
    Cursor cursor = getContentResolver()
            .query(Uri.parse("content://com.android.calendar/calendars"),
                    new String[] { "_id", "calendar_displayName" },"visible='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", examName);
    //event.put("description", description);
    event.put("eventLocation", venue);
    event.put(Events.ALL_DAY, 0);
    event.put("dtstart",  calSet.getTimeInMillis());
    event.put("dtend", (float)(length*3600000)+calSet.getTimeInMillis());
    event.put(Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());
    event.put(Events.AVAILABILITY, Events.AVAILABILITY_BUSY);
    event.put("hasAlarm", 1);

    Uri eventsUri = Uri.parse("content://com.android.calendar/events");
    Uri newEvent = 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);
    this.getContentResolver()
            .insert(Uri.parse("content://com.android.calendar/reminders"),
                    cv_alarm);
}


来源:https://stackoverflow.com/questions/21652782/android-calendar-intent-event-end-always-one-hour-after-start

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!