Cómo añadir eventos al calendario en Android

Los que ya lleváis tiempo metidos en el mundo del desarrollo Android sabéis de sobra que desde vuestra aplicación se pueden llamar a un montón de acciones con los Intent. Lo más común es abrir una url en el navegador o llamar por teléfono. El otro día echándole un ojo a una aplicación vi que se añadían eventos al calendario, así que decidí investigar como se hacía.

No es algo muy difícil, pero lo que he comprobado después de unas cuantas búsquedas por Google es que hay unas cuantas formas de hacerlo. La que os pongo hoy es la más sencilla y no requiere ningún permiso. Otras que vi requerían añadir ciertos permisos y solamente se pueden utilizar a partir de Android ICS en adelante.

private void addEventToCalendar(Activity activity){
  Calendar cal = Calendar.getInstance();
  
  cal.set(Calendar.DAY_OF_MONTH, 29);
  cal.set(Calendar.MONTH, 4);
  cal.set(Calendar.YEAR, 2013);
  
  cal.set(Calendar.HOUR_OF_DAY, 22);
  cal.set(Calendar.MINUTE, 45);
  
  Intent intent = new Intent(Intent.ACTION_EDIT);
  intent.setType("vnd.android.cursor.item/event");

  intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, cal.getTimeInMillis());
  intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, cal.getTimeInMillis()+60*60*1000);

  intent.putExtra(Events.ALL_DAY, false);
  intent.putExtra(Events.RRULE , "FREQ=DAILY");
  intent.putExtra(Events.TITLE, "Título de vuestro evento");
  intent.putExtra(Events.DESCRIPTION, "Descripción");
  intent.putExtra(Events.EVENT_LOCATION,"Calle ....");

  activity.startActivity(intent);
 }

Este método es muy sencillo. Simplemente creamos un objeto Calendar para a continuación setear los valores de día, mes, año, hora y minuto. Cuidado con el mes porque en vez de ir de 1 a 12 va de 0 a 11. 

Para el resto es muy sencillo, creamos un nuevo Intent le decimos que es un event con setType y seteamos algunos valores, el beginTime es la hora de inicio y le pasamos nuestra fecha convertida a milisegundos y para el endTime cogemos el mismo valor y le sumamos una hora convertida a milisegundos.

Podemos pasarle un título, la frecuencia o si es todo el día entre otros. El valor para la hora de inicio y fin están definidos en la clase CalendarContract y para el resto en Events que se encuentra dentro de CalendarContract.

Al ejecutarse el método debe abrir un popup dando a elegir que calendario utilizar si tenéis más de una aplicación para ello, y una vez seleccionado aparecerá ya seteado y listo para añadir el evento en vuestro calendario.

Comments are closed.