Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Consultar proveedor de contenido de calendario durante un mes, pero mostrar instancias por día

Tenemos una aplicación que coloca puntos en una vista de mes donde se producen los eventos del calendario. Estamos utilizando el proveedor de contenido del calendario para polular la vista.

El único problema es consultar al proveedor de contenido alrededor de 30 veces al mes: 1 – 30 de noviembre. Así que obtenemos el número correcto de instancias por día. De esta manera, el proveedor de contenido utiliza reglas de repetición y eventos de "varios días". Por ejemplo: Tenemos un evento que tiene lugar del 4 al 9 de noviembre. Consultando el proveedor de contenido diariamente, obtendremos el evento en: 4, 5, 6, 7, 8 y 9 de noviembre. Esto es obviamente correcto. Pero esto tiene un efecto muy negativo en el rendimiento. Por otro lado, si sólo pregunto una vez: 1-30 nov, sólo obtendré el mismo evento una vez. Así que necesito hacer algunos cálculos por mi cuenta para definir en qué celdas el evento debería aparecer.

Entonces, me preguntaba si hay un ayudante o una utilidad que hace esto para mí: 1 consulta: Pero 5 veces una instancia separada para un evento que ocurre más de una vez en ese intervalo de tiempo.

  • CalendarView tarda mucho tiempo en mostrar
  • La llamada requiere el nivel 24 de API (el mínimo actual es 12): android.icu.util.calendar
  • Android: cambiar el año directamente en material-calendarioview
  • Calendario de Android, obtener ID de evento
  • Cómo agregar eventos de calendario al calendario predeterminado, en silencio sin intención, en android 4?
  • No se puede actualizar el evento en el calendario del teléfono desde el código
  • Cómo establecer la fecha de caducidad en Android
  • Abrir la aplicación para Android desde el calendario
  • 3 Solutions collect form web for “Consultar proveedor de contenido de calendario durante un mes, pero mostrar instancias por día”

    Puede consultar los campos rrule , dtstart y dtend desde el URI de CalendarContract.Events y usarlos para calcular las fechas específicas. Compruebe este enlace para la descripción en el significado del campo y también este acoplamiento .

    ¿Por qué no comprobar Instancias tabla de la base de datos de calendario, me enfrenté a un problema de rendimiento similar y esta tabla resolvió que. Básicamente sostiene todas las recurrencias de eventos como instancias separadas, en resumen, si un evento está destinado a ocurrir durante los próximos 5 días, esta tabla tendrá cinco entradas para el mismo evento que detalla su atributo.

    http://developer.android.com/reference/android/provider/CalendarContract.Instances.html

    Espero que ayude, Techfist

     private static final String DEBUG_TAG = "MyActivity"; public static final String[] INSTANCE_PROJECTION = new String[] { Instances.EVENT_ID, // 0 Instances.BEGIN, // 1 Instances.TITLE // 2 }; // The indices for the projection array above. private static final int PROJECTION_ID_INDEX = 0; private static final int PROJECTION_BEGIN_INDEX = 1; private static final int PROJECTION_TITLE_INDEX = 2; ... // Specify the date range you want to search for recurring // event instances Calendar beginTime = Calendar.getInstance(); beginTime.set(2011, 9, 23, 8, 0); long startMillis = beginTime.getTimeInMillis(); Calendar endTime = Calendar.getInstance(); endTime.set(2011, 10, 24, 8, 0); long endMillis = endTime.getTimeInMillis(); Cursor cur = null; ContentResolver cr = getContentResolver(); // The ID of the recurring event whose instances you are searching // for in the Instances table String selection = Instances.EVENT_ID + " = ?"; String[] selectionArgs = new String[] {"207"}; // Construct the query with the desired date range. Uri.Builder builder = Instances.CONTENT_URI.buildUpon(); ContentUris.appendId(builder, startMillis); ContentUris.appendId(builder, endMillis); // Submit the query cur = cr.query(builder.build(), INSTANCE_PROJECTION, selection, selectionArgs, null); while (cur.moveToNext()) { String title = null; long eventID = 0; long beginVal = 0; // Get the field values eventID = cur.getLong(PROJECTION_ID_INDEX); beginVal = cur.getLong(PROJECTION_BEGIN_INDEX); title = cur.getString(PROJECTION_TITLE_INDEX); // Do something with the values. Log.i(DEBUG_TAG, "Event: " + title); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(beginVal); DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy"); Log.i(DEBUG_TAG, "Date: " + formatter.format(calendar.getTime())); } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.