Abrir la aplicación para Android desde el calendario

La aplicación en la que estoy trabajando debe ser capaz de crear eventos en un calendario seleccionado y, a continuación, cuando el usuario ve estos eventos en su aplicación de visualización de calendario, ofrece una opción para volver a mi aplicación para ver más información sobre ella y los datos Relacionados con ella.

Uso del proveedor de calendario Puedo crear los eventos y almacenar el Uri en el evento para su posterior uso o eliminación, pero no he encontrado una buena forma de abrir mi aplicación de estos eventos en una aplicación de visualización de calendario.

Las 2 opciones que he considerado son incluir una URL personalizada en la descripción del evento que cuando se hace clic será capturada por un filtro de intención en mi aplicación (por ejemplo, myapp: // evento / 1000) o podría establecer los valores CUSTOM_APP_PACKAGE y CUSTOM_APP_URI desde CalendarContract al crear el evento.

Mi problema con la primera opción es que no creo que pueda garantizar que la aplicación de visualización del calendario tratará correctamente mi URL personalizada como enlace y que deje que el usuario haga clic en él (no funcionó en el calendario de Google en mi tablet). La segunda opción parece más prometedora pero no he podido encontrar mucha documentación explicando cómo usarla.

¿Alguien sabe cómo hacerlo correctamente? Cualquier ayuda es apreciada!

Si la orientación de Jelly Bean (API 16+) es aceptable, entonces usar CUSTOM_APP_PACKAGE es la mejor solución. Al agregar el nuevo evento de calendario, sólo tiene que rellenar los campos CUSTOM_APP_PACKAGE y CUSTOM_APP_URI (con su nombre de paquete y un URI que identifica el evento, respectivamente):

 ContentValues values = new ContentValues(); values.put(CalendarContract.Events.CALENDAR_ID, 1); values.put(CalendarContract.Events.TITLE, "Check stackoverflow.com"); values.put(CalendarContract.Events.DTSTART, beginTime.getTimeInMillis()); values.put(CalendarContract.Events.DTEND, endTime.getTimeInMillis()); values.put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().getID()); values.put(CalendarContract.Events.CUSTOM_APP_PACKAGE, getPackageName()); values.put(CalendarContract.Events.CUSTOM_APP_URI, "myAppointment://1"); getContentResolver().insert(CalendarContract.Events.CONTENT_URI, values); 

A continuación, debe especificar como parte de AndroidManifest.xml (como se explica en la documentación ) la Actividad que se llamará desde la aplicación Calendario para mostrar la vista detallada, por ejemplo

  <activity android:name=".ShowCalendarDetailActivity"> <intent-filter> <action android:name="android.provider.calendar.action.HANDLE_CUSTOM_EVENT" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="vnd.android.cursor.item/event" /> </intent-filter> </activity> 

ShowCalendarDetailActivity se iniciará al pulsar en el botón que aparece y se pasará un intento con acción "android.provider.calendar.action.HANDLE_CUSTOM_EVENT" y su URI será el elemento de calendario URI.

El URI personalizado que proporcionaste está en los extras, con la clave CalendarContract.EXTRA_CUSTOM_APP_URI .

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String myCustomUri = getIntent().getStringExtra(CalendarContract.EXTRA_CUSTOM_APP_URI); ... } 

Si desea echar un vistazo al código en el que la aplicación de calendario crea esta intención, vea EventInfoFragment.updateCustomAppButton() en EventInfoFragment.java .

La primera opción que has enumerado funciona bien en mi Nexus S. Acabo de probarla ahora mismo para asegurarme de que funcionaba desde la aplicación predeterminada de Google Calendar.

En mi caso, no estoy interceptando myapp://event/1000 , estoy interceptando una url real más como https://myspecialdomain.com/blahblah . El navegador empieza a cargar, pero antes de que tenga tiempo para cargar algo, se cambia por mi aplicación.

Te puedo mostrar mi código mañana si quieres.

  • ¿Cómo usar la vista de calendario personalizada en Android y cómo configurar la alerta para recordatorio?
  • Proveedor de calendario para Android: ¿Cómo puedo eliminar mis propios calendarios locales?
  • Cómo agregar eventos de calendario al calendario predeterminado, en silencio sin intención, en android 4?
  • Cómo establecer la fecha de caducidad en Android
  • Cómo obtener la hora de inicio de un evento desde el calendario android
  • Interesting Posts
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.