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.

  • Android Studio - SDK está desactualizado o falta plantillas
  • Agrupe varias aplicaciones bajo el mismo icono en el Lanzador de aplicaciones
  • ¿Qué conocimiento previo asume el desarrollo de Android?
  • Opciones de envasado basadas en el sabor del producto en gradle
  • ¿Cómo implementar un reproductor de audio para Android usando MediaPlayer y MediaController?
  • Android Support Repo 46.0.0 con Android Studio 2.3
  • 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.

  • Cómo utilizar múltiples MapActivities / MapViews por aplicación / proceso de Android
  • Cómo agregar opciones de menú y configuración a la barra de título personalizada de android?
  • Botón Atrás en ActionBar en MainActivity
  • Dagger 2 - ¿Por qué es un ciclo de dependencia?
  • Por qué la clave Api de Google map necesita cambiar frecuentemente
  • Equivalente de ImageView scaleType 'centerCrop' a bitmap gravedad dibujable
  • 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.