Sincronización del proveedor del calendario para Android: columnas SYNC_DATA?

Me gustaría sincronizar entre el calendario interno de Android y mi aplicación. Estoy utilizando CalendarContract disponible desde Android API 14 en adelante.

Cualquier cambio del proveedor de contenido "com.android.calendar" llama a onPerformSync (..) de mi adaptador de sincronización. Sin embargo, en este punto, todas las filas de los eventos se establecen DIRTY = 0. Esto significa que la sincronización del calendario de Google debe haber establecido el DIRTY FLAG a cero antes de que mi adaptador de sincronización pueda acceder a ellos.

CalendarContract.EventsColumns.SYNC_DATA1 – Se dice que SYNCDATA10 son columnas del proveedor de contenido para su uso con adaptadores de sincronización. ¿Alguien sabe si hay alguna convención para cuál es el uso de estas columnas? Me he dado cuenta de que en mi dispositivo SYNC_DATA5 almacena la fecha modificada por última vez y SYNC_DATA1 parece almacenar el ID de evento de Google. Por lo tanto, parece que cuando se sincroniza la aplicación Calendario con Google Calendar, estas columnas se modifican.

Sin embargo, si elijo utilizar una de estas columnas para mi adaptador de sincronización, ¿cómo puedo asegurarme de que otra aplicación no utilice las mismas columnas y se anulen entre sí?

Si SYNC_DATA5 SIEMPRE es utilizado por Google Calendar para almacenar la fecha de la última modificación, estaría bien con sólo usarlo para mi lógica de sincronización, solo necesito estar seguro de que se trata de una convención.

Las columnas SYNC_DATA se pueden utilizar para cualquier valor. No estoy seguro de cómo funciona el calendario de Google, pero están destinados a cosas relacionadas con el adaptador de sincronización, las aplicaciones que no sincronizan el calendario no deben usarlas. Por lo tanto, es seguro utilizar cualquier columna (dado que no la cambia entre las versiones de su aplicación, o debería escribir código de migración), ya que no debería haber otros adaptadores de sincronización trabajando en su calendario.

No puede confiar en las columnas SYNC_DATA cuando no es un adaptador de sincronización, no las utilice cuando el calendario no es "suyo".


Sin embargo, tengo una fuerte sensación de que no estás sincronizando correctamente. Para sincronizar un calendario, debe utilizar un calendario independiente , no un calendario sincronizado por google o cualquier otra aplicación de terceros. También enumeraré algunos otros pasos involucrados que creo que realizó, pero puede ser útil para otros.

También necesita agregar algunos parámetros a cualquiera de sus solicitudes del sistema para que tenga acceso a los campos del adaptador de sincronización. Además, debe sincronizar su calendario sólo con una implementación de AbstractThreadedSyncAdapter . Para eso, también necesitas proporcionar un autenticador, si aún no tienes ninguno (para que el usuario pueda habilitar / deshabilitar tu adaptador de sincronización en las preferencias de sincronización de una cuenta). Se puede encontrar una visión general sobre el adaptador de sincronización en esta entrada del blog .

Si no tiene cuentas de servidor y sólo un calendario, debe realizar algunas tareas al iniciar por primera vez:

  1. Crea una cuenta
  2. Crear el calendario vinculado a esa cuenta
  3. Habilitar el adaptador de sincronización

Después de eso, Android se encargará de ejecutar su adaptador de sincronización de vez en cuando, y puede acceder a las columnas SYNC_DATA sin colisiones (en el calendario que creó) y los indicadores DIRTY se sirven correctamente.

  • Confundido acerca de la sincronización de varias tablas con el adaptador de sincronización y el proveedor de contenido
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.