Android Agregar evento al calendario con Intent, obtiene el identificador de evento
Estoy tratando de agregar evento a través de una intención de calendario. Sin embargo, no puedo averiguar cómo obtener el ID de evento del evento que acaba de agregar.
Intent intent = new Intent(Intent.ACTION_EDIT); intent.setType("vnd.android.cursor.item/event"); intent.putExtra("beginTime", sdate.getTime()); intent.putExtra("endTime", edate.getTime()); intent.putExtra("allDay", true); intent.putExtra("rrule", "FREQ=YEARLY"); intent.putExtra("title", "A Test Event from android app"); intent.putExtra("description", "Description here"); intent.putExtra("eventLocation", "location here here here");
Leí extensamente sobre otros recursos y no puedo encontrar una respuesta. Intenté startActivityForResult pero no puedo conseguirlo funcionar. Otros métodos que intento no pueden buscarlo hasta que la actividad termina.
- Crear un evento repetitivo con recordatorio hasta el día específico sin Intent en Android?
- Escucha los nuevos eventos del calendario
- ¿Cómo puedo ayudar a un usuario a suscribirse a un calendario externo al calendario de Google en un dispositivo Android?
- Obtener el inicio de la semana y la fecha de finalización del número de la semana y del año en android
- Obtén el día de la semana en GregorianCalendar
¿Hay alguna otra forma de obtener el ID del evento después de que el evento se haya agregado al calendario? Necesito usar el método de intención para esto.
- ¿Cómo seleccionar la fecha múltiple en calendarView personalizado?
- ¿Cómo consultar los nuevos recordatorios de la aplicación de calendario para Android?
- Android startActivityForResult no devolver datos de calendario
- Los eventos AllDay de Android comienzan o terminan en el día incorrecto
- Crear nuevo calendario sincronizado con api de Android
- Calendario de HORA y MINUTO sin cero - Android
- Obtención de año, mes y fecha en Android
- ¿Cómo puedo agregar eventos al calendario automáticamente?
Pruebe esta única solución:
import android.content.ContentResolver; import android.content.ContentValues; import android.net.Uri; public class CalenderUtils { /** * Add a new event into a native Google calendar. Add alert notification by setting <code>isRemind</code> as <code>true</code>. * @param cr - ContentResolver * @param title - Event title * @param addInfo - Event description * @param place - Event place * @param status - <code>int</code> This information is sufficient for most entries: tentative (0), confirmed (1) or canceled (2): * @param startDate - <code>long</code> event start time in mls * @param isRemind - <code>boolean</code> need to remind about event before? * @param isMailService - <code>boolean</code>. Adding attendees to the meeting * @return <code>long</code> eventID */ public static long addEventToCalender(ContentResolver cr, String title, String addInfo, String place, int status, long startDate, boolean isRemind, boolean isMailService) { String eventUriStr = "content://com.android.calendar/events"; ContentValues event = new ContentValues(); // id, We need to choose from our mobile for primary its 1 event.put("calendar_id", 1); event.put("title", title); event.put("description", addInfo); event.put("eventLocation", place); event.put("eventTimezone", "UTC/GMT +2:00"); // For next 1hr long endDate = startDate + 1000 * 60 * 60; event.put("dtstart", startDate); event.put("dtend", endDate); //If it is bithday alarm or such kind (which should remind me for whole day) 0 for false, 1 for true // values.put("allDay", 1); event.put("eventStatus", status); event.put("hasAlarm", 1); Uri eventUri = cr.insert(Uri.parse(eventUriStr), event); long eventID = Long.parseLong(eventUri.getLastPathSegment()); if (isRemind) { String reminderUriString = "content://com.android.calendar/reminders"; ContentValues reminderValues = new ContentValues(); reminderValues.put("event_id", eventID); // Default value of the system. Minutes is a integer reminderValues.put("minutes", 5); // Alert Methods: Default(0), Alert(1), Email(2), SMS(3) reminderValues.put("method", 1); cr.insert(Uri.parse(reminderUriString), reminderValues); //Uri reminderUri = } if (isMailService) { String attendeuesesUriString = "content://com.android.calendar/attendees"; /********* To add multiple attendees need to insert ContentValues multiple times ***********/ ContentValues attendeesValues = new ContentValues(); attendeesValues.put("event_id", eventID); // Attendees name attendeesValues.put("attendeeName", "xxxxx"); // Attendee email attendeesValues.put("attendeeEmail", "[email protected]"); // Relationship_Attendee(1), Relationship_None(0), Organizer(2), Performer(3), Speaker(4) attendeesValues.put("attendeeRelationship", 0); // None(0), Optional(1), Required(2), Resource(3) attendeesValues.put("attendeeType", 0); // None(0), Accepted(1), Decline(2), Invited(3), Tentative(4) attendeesValues.put("attendeeStatus", 0); cr.insert(Uri.parse(attendeuesesUriString), attendeesValues); //Uri attendeuesesUri = } return eventID; } }
Copypasted esta clase de mi proyecto así que usted es agradable cambiar los nombres como usted prefiere. Como se nota aquí u recibir valor de id
después de la inserción.
Si necesita obtener reminderId
o id
reunión con los asistentes – tiene que manejar un valor de retorno de cr.insert...
y luego parce uri long id = Long.parseLong(uri.getLastPathSegment());
Aquí hay una información adicional: CalendarContract.Events y capítulo Calendario
- Android: el método booleano XX siempre se invierte
- Cómo evitar que el botón dentro de ListItem obtener resaltar