studio sincronizar recuperar planner google eventos con calendario añadir actualizar android calendar gdata-api gdata

recuperar - sincronizar calendario outlook android



Obteniendo excepción al insertar eventos en el calendario de Android (5)

Estoy insertando eventos en mi calendario de Android. el código es siguiente:

ContentValues event = new ContentValues(); event.put("calendar_id", calId); event.put("title", "Event Title"); event.put("description", "Event Desc"); event.put("eventLocation", "Event Location"); event.put("allDay", 1); event.put("eventStatus", 1); event.put("visibility", 0); event.put("transparency", 0); event.put("hasAlarm", 1); Date d = new Date(); d.setHours(8); d.setMinutes(30); d.setSeconds(30); long startTime = d.getTime(); d.setHours(12); d.setMinutes(30); d.setSeconds(20); long endTime = d.getTime(); event.put("dtstart", startTime); // event.put("dtend", endTime); event.put("rrule", "FREQ=DAILY;WKST=SU"); // event.put("lastDate", endTime); // event.put("timezone", "Asia/Karachi"); //event.put("duration", "P3600S"); //Calendar gmtC = new GregorianCalendar(TimeZone.getTimeZone("Asia/Karachi")); // event.put("transparency", 0); // event.put("hasAlarm", 1); // 0 for false, 1 for true Uri eventsUri = Uri.parse("content://calendar/events"); Uri url = getContentResolver().insert(eventsUri, event);

recibo la siguiente excepción:

java.lang.IllegalArgumentException: allDay is true but sec, min, hour are not 0.

¡necesitas ayuda!


La API de GData del calendario define un evento de todo el día con una hora de inicio de solo la fecha y la hora de finalización del día posterior al final del evento.

Estos son los datos enviados a la api de datos de Google

<entry xmlns=''http://www.w3.org/2005/Atom'' xmlns:gd=''http://schemas.google.com/g/2005''> <category scheme=''http://schemas.google.com/g/2005#kind'' term=''http://schemas.google.com/g/2005#event''></category> <title type=''text''>Word of the Day</title> <gd:when startTime=''2007-07-17'' endTime=''2007-07-18''></gd:when> </entry>

Observe que los tiempos de inicio / finalización no contienen ninguna información de tiempo en ellos.

NO PUEDE tener un evento de todo el día que no comience a la medianoche. Es por eso que estás recibiendo la excepción. hour, min, sec DEBE ser 0 para ellos en un evento de todo el día.

Puedes probar con otro foro, pero siempre obtendrás esta respuesta porque así es como funciona la API de GData.


especifica "allDay" como verdadero, pero establece un tiempo con sec, min y hora. Lo que significa para el sistema, que no es todo el día ... intente eliminar allDay o la configuración de tiempo. Quizás estos son opuestos y contradictorios.


Me encontré con el mismo problema, incluso con horas, minutos y segundos establecidos en 0. Luego descubrí que para los eventos de todos los días, los tiempos tienen que configurarse en UTC. Esto significa que debe agregar el desplazamiento UTC de la zona horaria del calendario a la hora de inicio de su evento de todo el día.

Por ejemplo: ¡(timezone y startTime solo están codificadas para simplificar!)

// You should write a method to get the calendar''s timezone through a query String calendarTimezone = "CET"; // Start time of the event. Hours, minutes and seconds have to be 0. long startTime = 1315087200000L; // equals 2011-09-04 00:00:00 // Get UTC offset for the given timezone and start time. This way DST is accounted for. int timeZoneOffset = TimeZone.getTimeZone(calendarTimezone).getOffset(startTime); // Set same time for start and end of the allday event. Add UTC offset. event.put("dtstart", startTime + timeZoneOffset); event.put("dtend", startTime + timeZoneOffset); event.put("allDay", 1);


rob es correcto! Debe definir eventos de todos los días en UTC. El siguiente código es un poco más agradable que la versión robs:

Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.set(Calendar.HOUR, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); cal.setTimeZone(TimeZone.getTimeZone("UTC")); long dtstart = cal.getTimeInMillis(); builder.withValue(Events.DTSTART, dtstart);