Añadir un evento en el calendario de Android con PhoneGap

Esta vez en un proyecto en la empresa surgió la necesidad de dar la posibilidad al usuario de añadir un evento al calendario de su dispositivo. En todo esto hay un pero, hasta Android 4.0 o superior el calendario no era aplicación nativa por lo cual era casi imposible poder interactuar correctamente con el mismo. Bueno, me dejo de rollo y empezamos manos a la obra.

Lo vamos a realizar haciendo uso de los plugins de Phonegap. Para ello, lo primero será crear nuestra clase CordovaPlugin.

public class CalendarPlugin extends CordovaPlugin {
     @Override
     public boolean execute(String action, JSONArray args,
CallbackContext callbackContext) throws JSONException {

          if (action.equals("saveEvent")) {

               String message = "Cita para "+args.getString(0);
               Intent intent = new Intent(Intent.ACTION_EDIT);
               intent.setType("vnd.android.cursor.item/event");
               intent.putExtra("title", message);
               intent.putExtra("eventLocation", args.getString(1));
               intent.putExtra("description", args.getString(5)+ ", "+args.getString(4));
               Calendar cal = Calendar.getInstance();
			   intent.putExtra("beginTime", cal.getTimeInMillis());
			   intent.putExtra("endTime", cal.getTimeInMillis()+10*60*1000);
               cordova.getActivity().startActivity(intent);
               return true;
		   }
		   return false;
     }
}

En el método execute por defecto de CordovaPlugin hacemos uso de un Intent propio de Android “Intent.ACTION_EDIT” que nos permitirá lanzar la edición del calendario. A dicho Intent se le puede añadir más extras para así incluso configurar alarmas, repeticiones e invitados al evento.


Para poder hacer uso del “Intent.ACTION_EDIT”  es necesario primero habilitarlo en el Manifest además de añadir los permisos necesarios.

     <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:name="android.intent.action.EDIT" android:label="@string/app_name" >
     </activity>
     <uses-permission android:name="android.permission.READ_CALENDAR" />
     <uses-permission android:name="android.permission.WRITE_CALENDAR" />

Una vez ya tenemos el plugin desarrollado, ya podemos registrarlo en PhoneGap añadiendolo a config.xml. Vamos a añadir el plugin nativo de Phonegap para poder controlar la versión del dispositivo.


     <cordova>
         <access origin="http://127.0.0.1*"/>
         <preference name="useBrowserHistory" value="true" />
         <preference name="exit-on-suspend" value="false" />
         <plugins>
              <plugin name="Calendar" value="com.ctrlzapps.CalendarPlugin" />
              <plugin name="Device" value="org.apache.cordova.Device"/>
                   .....
                   .....
                   .....
         </plugins>
      </cordova>

Y para finalizar, la invocación desde javascript, como podrás ver, comprobamos que la versión del sistema operativo sea mayor o igual a 4.


     var versionDevice = device.version;
     var splitVersion = versionDevice.split('.');
     if(splitVersion[0] >= 4){
          cordova.exec(mostrarMensajeError, function(err) {
			     mostrarMensajeError('Se ha producido un error registrando el evento');
	      },  "Calendar", "saveEvent", [nombre, centroDesc, fecha, hora, consultaDesc, actividadDesc]);
     }

Espero que te haya sido útil.

Anuncios

4 comentarios

  1. Hola y como se hace para acceder al calendario de android < 4? Saludos!

    1. Hola David, siento informarte que antes de Android 4 no había soporte nativo de acceso al calendario. Antes de la versión 4, Android no disponía de aplicación nativa de calendario, con lo cual no hay integración. La única forma es si se usa Google Calendario realizar una integración haciendo uso de la api de Google Calendario.

  2. Al crearme un proyecto con phonegap y pongo este ejemplo me sale un error, no me reconoce la clase CordovaPlugin, alguna solución talvez?

    1. Que versión de Phonegap estás usando? Has verificado que cordova.jar está dentro de la carpeta lib? Está ese cordova.jar dentro del buildpath del proyecto?

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: