Hacer que los eventos de calendario

Mi problema es, que tengo que hacer una demo de la aplicación en la que me quiere leer los eventos del calendario de Google, por lo que he insertado manualmente los eventos como el título del evento, el tiempo de los acontecimientos y los detalles de todo lo sucedido. ahora necesito leer los acontecimientos de ese calendario.
Por que he tratado de usar el gcode(google code) de la API que proporciona el calendario de la API de la clase. Pero todavía me puedo leer esos eventos.

  • Escribí un artículo acerca de la lectura directamente desde el calendario actualmente se sincronizan con el teléfono. jimblackler.net/blog/?p=151
  • he probado esto, pero ese código no funciona,,,
  • También traté de jimblackler.net/blog/?p=151 este código .Frente error durante la depuración .Podría alguno por favor me diga cómo obtener los eventos del calendario de google en android.Me puedes obtener solo el Android calendario de eventos no sólo eventos del calendario de google.
  • se ha publicado la misma pregunta como un comentario aquí y en 3 diferentes respuestas. Usted probablemente no obtendrá ninguna respuesta haciendo esto. Creo que se debería crear su propia pregunta con una explicación más detallada de su problema

5 Kommentare

  1. 21

    Que el código de arriba es bastante horrible (y no parecen funcionar en ICS – definitivamente los nombres de columna son diferentes)

    La página aquí:
    http://developer.android.com/guide/topics/providers/calendar-provider.html

    proporciona una mejor visión de conjunto.
    Un (mucho) más simple código para recuperar calendarios:

    public class CalendarContentResolver {
        public static final String[] FIELDS = { 
            CalendarContract.Calendars.NAME,
            CalendarContract.Calendars.CALENDAR_DISPLAY_NAME,
            CalendarContract.Calendars.CALENDAR_COLOR,
            CalendarContract.Calendars.VISIBLE 
        };
    
        public static final Uri CALENDAR_URI = Uri.parse("content://com.android.calendar/calendars");
    
        ContentResolver contentResolver;
        Set<String> calendars = new HashSet<String>();
    
        public  CalendarContentResolver(Context ctx) {
            contentResolver = ctx.getContentResolver();
        }
    
        public Set<String> getCalendars() {
            //Fetch a list of all calendars sync'd with the device and their display names
            Cursor cursor = contentResolver.query(CALENDAR_URI, FIELDS, null, null, null);
    
            try {
                if (cursor.getCount() > 0) {
                    while (cursor.moveToNext()) {
                        String name = cursor.getString(0);
                        String displayName = cursor.getString(1);
                        //This is actually a better pattern:
                        String color = cursor.getString(cursor.getColumnIndex(CalendarContract.Calendars.CALENDAR_COLOR));
                        Boolean selected = !cursor.getString(3).equals("0");
                        calendars.add(displayName);  
                    }
                }
            } catch (AssertionError ex) { /*TODO: log exception and bail*/ }
    
            return calendars;
        }
    }

    Espero que esto ayude!

    • a partir de hoy, CalendarContract sólo está disponible en la API de nivel 14 y superior. Así, este código no sería útil si alguien se dirige a la API de los niveles equivalentes a o por debajo de el Panal de la familia.
    • Podría alguno por favor me diga cómo obtener los eventos del calendario de google en android.Me puedes obtener solo el Android calendario de eventos no sólo eventos del calendario de google.
    • Sí, su ejemplo es más sencillo que el desordenado pero MUY robusto y práctico ejemplo de arriba. En el ejemplo proporcionado, simplemente muestra el calendario de los nombres de los que están disponibles, y no se ocupa (lo más importante) de los eventos. Es básicamente inútil, sin embargo, el código limpio.
    • No te olvides de cursor.close()
  2. 19

    Ok he encontrado la respuesta a este conjunto de la idea de que la forma de utilizar la aplicación google calendar integración con el teléfono android.

    código:–

    primera se establece de esta línea que se va a leer el calendario de eventos de forma que los otros de la clase de la forma de su clase que es actual es el ApplicationSettings.java .

    ReadCalendar.readCalendar(ApplicationSettings.this);

    package com.mycalendarevents.android;
    
    import java.util.Date;
    import java.util.HashSet;
    import java.util.regex.Pattern;
    
    import android.content.ContentResolver;
    import android.content.ContentUris;
    import android.content.Context;
    import android.database.Cursor;
    import android.net.Uri;
    import android.text.format.DateUtils;
    
    public class ReadCalendar
    {
        static Cursor cursor;
    
        public static void readCalendar(Context context) {
    
            ContentResolver contentResolver = context.getContentResolver();
    
            //Fetch a list of all calendars synced with the device, their display names and whether the
    
            cursor = contentResolver.query(Uri.parse("content://com.android.calendar/calendars"),
                    (new String[] { "_id", "displayName", "selected"}), null, null, null);
    
            HashSet<String> calendarIds = new HashSet<String>();
    
            try
            {
                System.out.println("Count="+cursor.getCount());
                if(cursor.getCount() > 0)
                {
                    System.out.println("the control is just inside of the cursor.count loop");
                    while (cursor.moveToNext()) {
    
                        String _id = cursor.getString(0);
                        String displayName = cursor.getString(1);
                        Boolean selected = !cursor.getString(2).equals("0");
    
                        System.out.println("Id: " + _id + " Display Name: " + displayName + " Selected: " + selected);
                        calendarIds.add(_id);
                    }
                }
            }
            catch(AssertionError ex)
            {
                ex.printStackTrace();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
    
    
            //For each calendar, display all the events from the previous week to the end of next week.        
            for (String id : calendarIds) {
                Uri.Builder builder = Uri.parse("content://com.android.calendar/instances/when").buildUpon();
                //Uri.Builder builder = Uri.parse("content://com.android.calendar/calendars").buildUpon();
                long now = new Date().getTime();
    
                ContentUris.appendId(builder, now - DateUtils.DAY_IN_MILLIS * 10000);
                ContentUris.appendId(builder, now + DateUtils.DAY_IN_MILLIS * 10000);
    
                Cursor eventCursor = contentResolver.query(builder.build(),
                        new String[]  { "title", "begin", "end", "allDay"}, "Calendars._id=" + 1,
                        null, "startDay ASC, startMinute ASC");
    
                System.out.println("eventCursor count="+eventCursor.getCount());
                if(eventCursor.getCount()>0)
                {
    
                    if(eventCursor.moveToFirst())
                    {
                        do
                        {
                            Object mbeg_date,beg_date,beg_time,end_date,end_time;
    
                            final String title = eventCursor.getString(0);
                            final Date begin = new Date(eventCursor.getLong(1));
                            final Date end = new Date(eventCursor.getLong(2));
                            final Boolean allDay = !eventCursor.getString(3).equals("0");
    
                            /*  System.out.println("Title: " + title + " Begin: " + begin + " End: " + end +
                                        " All Day: " + allDay);
                            */
                            System.out.println("Title:"+title);
                            System.out.println("Begin:"+begin);
                            System.out.println("End:"+end);
                            System.out.println("All Day:"+allDay);
    
                            /* the calendar control metting-begin events Respose  sub-string (starts....hare) */
    
                            Pattern p = Pattern.compile(" ");
                            String[] items = p.split(begin.toString());
                            String scalendar_metting_beginday,scalendar_metting_beginmonth,scalendar_metting_beginyear,scalendar_metting_begindate,scalendar_metting_begintime,scalendar_metting_begingmt;
    
                            scalendar_metting_beginday = items[0];
                            scalendar_metting_beginmonth = items[1];
                            scalendar_metting_begindate = items[2];
                            scalendar_metting_begintime = items[3];
                            scalendar_metting_begingmt = items[4];
                            scalendar_metting_beginyear = items[5];
    
    
                            String  calendar_metting_beginday = scalendar_metting_beginday;
                            String  calendar_metting_beginmonth = scalendar_metting_beginmonth.toString().trim();
    
                            int  calendar_metting_begindate = Integer.parseInt(scalendar_metting_begindate.trim());
    
                            String calendar_metting_begintime = scalendar_metting_begintime.toString().trim();
                            String calendar_metting_begingmt = scalendar_metting_begingmt;
                            int calendar_metting_beginyear = Integer.parseInt(scalendar_metting_beginyear.trim());
    
    
                            System.out.println("calendar_metting_beginday="+calendar_metting_beginday);
    
                            System.out.println("calendar_metting_beginmonth ="+calendar_metting_beginmonth);
    
                            System.out.println("calendar_metting_begindate ="+calendar_metting_begindate);
    
                            System.out.println("calendar_metting_begintime="+calendar_metting_begintime);
    
                            System.out.println("calendar_metting_begingmt ="+calendar_metting_begingmt);
    
                            System.out.println("calendar_metting_beginyear ="+calendar_metting_beginyear);
    
                              /* the calendar control metting-begin events Respose  sub-string (starts....ends) */  
    
                            /* the calendar control metting-end events Respose  sub-string (starts....hare) */
    
                            Pattern p1 = Pattern.compile(" ");
                            String[] enditems = p.split(end.toString());
                            String scalendar_metting_endday,scalendar_metting_endmonth,scalendar_metting_endyear,scalendar_metting_enddate,scalendar_metting_endtime,scalendar_metting_endgmt;
    
                            scalendar_metting_endday = enditems[0];
                            scalendar_metting_endmonth = enditems[1];
                            scalendar_metting_enddate = enditems[2];
                            scalendar_metting_endtime = enditems[3];
                            scalendar_metting_endgmt = enditems[4];
                            scalendar_metting_endyear = enditems[5];
    
    
                            String  calendar_metting_endday = scalendar_metting_endday;
                            String  calendar_metting_endmonth = scalendar_metting_endmonth.toString().trim();
    
                            int  calendar_metting_enddate = Integer.parseInt(scalendar_metting_enddate.trim());
    
                            String calendar_metting_endtime = scalendar_metting_endtime.toString().trim();
                            String calendar_metting_endgmt = scalendar_metting_endgmt;
                            int calendar_metting_endyear = Integer.parseInt(scalendar_metting_endyear.trim());
    
    
                            System.out.println("calendar_metting_beginday="+calendar_metting_endday);
    
                            System.out.println("calendar_metting_beginmonth ="+calendar_metting_endmonth);
    
                            System.out.println("calendar_metting_begindate ="+calendar_metting_enddate);
    
                            System.out.println("calendar_metting_begintime="+calendar_metting_endtime);
    
                            System.out.println("calendar_metting_begingmt ="+calendar_metting_endgmt);
    
                            System.out.println("calendar_metting_beginyear ="+calendar_metting_endyear);
    
                              /* the calendar control metting-end events Respose  sub-string (starts....ends) */
    
                            System.out.println("only date begin of events="+begin.getDate());
                            System.out.println("only begin time of events="+begin.getHours() + ":" +begin.getMinutes() + ":" +begin.getSeconds());
    
    
                           System.out.println("only date begin of events="+end.getDate());
                            System.out.println("only begin time of events="+end.getHours() + ":" +end.getMinutes() + ":" +end.getSeconds());
    
                            beg_date = begin.getDate();
                            mbeg_date = begin.getDate()+"/"+calendar_metting_beginmonth+"/"+calendar_metting_beginyear;
                            beg_time = begin.getHours();
    
                            System.out.println("the vaule of mbeg_date="+mbeg_date.toString().trim());
                            end_date = end.getDate();
                            end_time = end.getHours();
    
    
                            CallHandlerUI.metting_begin_date.add(beg_date.toString());
                            CallHandlerUI.metting_begin_mdate.add(mbeg_date.toString());
    
                            CallHandlerUI.metting_begin_mtime.add(calendar_metting_begintime.toString());
    
                            CallHandlerUI.metting_end_date.add(end_date.toString());
                            CallHandlerUI.metting_end_time.add(end_time.toString());
                            CallHandlerUI.metting_end_mtime.add(calendar_metting_endtime.toString());
    
                        }
                        while(eventCursor.moveToNext());
                    }
                }
                break;
            }
        }
    }

    aquí es todo el código se publicará lo que se lee simplemente cada uno y todos los eventos de la forma de su calendario con la ayuda de la devolución de la dirección url que es para 2.2 y superiores versión:

    Uri.parse("content://com.android.calendar/instances/when").buildUpon();

    pl encontrar la virtud de aquellos versión inferior a 2.2 de android y el uso de esos eventos como usted requirió lugar…

    • Podría alguno por favor me diga cómo obtener los eventos del calendario de google en android.Me puedes obtener solo el Android calendario de eventos no sólo eventos del calendario de google.
    • Gran ejemplo! Sin embargo, hay un pequeño bug en la segunda consulta: "Calendars._id=" + 1 debe ser "calendar_id=" + id. O mejor aún CalendarContract.Instances.CALENDAR_ID + "=" + id
    • Acabo de encontrar otra cuestión: la verdad Es que muestra todos los eventos con una amplia gama de 20000 días en todo el día de hoy :-p . Mejor reemplazar la * 10000‘s en el caso de bucle por * 7.
    • tienes la solución?
    • Sí. stackoverflow.com/questions/27783610/…
  3. 8

    Soy consciente de que este es un viejo post, pero he encontrado la inspiración para la optimización de la solución encontrada en la respuesta dada por Akash Takkar, si alguien está en necesidad de una solución en el futuro cercano.

    Las cuestiones


    Especícamente, he encontrado un par de problemas en el código original:

    1. El bucle para la recuperación de los eventos del calendario se rompió inmaduros
      • Por medio de la presente, sólo los eventos desde el primer calendario se ha recuperado
    2. El primer evento en su calendario, se abandonó el uso de eventCursor.moveToFirst(); que a partir de entonces se mueve directamente para el próximo evento en el bucle while
    3. La identificación de los calendarios no se han establecido correctamente en el eventCursor
      • «Calendarios._id=» + 1 «Calendarios._id=» + id,
    4. Sería difícil que otros usuarios especificar su propia rango de tiempo
    5. La solución actual no es orientado a objetos que se mantenga muchas ventajas
    6. La legibilidad y la documentación no es la mejor

    La solución


    He crea un Github Biblioteca que devuelve una lista de objetos de eventos en un intervalo de tiempo especificado, que puede ser encontrado en:

    https://github.com/david-laundav/CalendarService

    Los archivos de origen se puede encontrar en «CalendarService/src/dk/CalendarService».

    Casos de uso

    La solución en sí misma contiene dos métodos diferentes para diferentes propósitos.

    Primer caso de uso:

    CalendarService.readCalendar(class.this)
    //where class.this is either your class or the context

    Este método devolverá una lista de eventos de +/- 1 día

    Segundo caso de uso:

    También puede especificar su propia rango de tiempo:

    CalendarService.readCalendar(class.this, int days, int hours)

    Un ejemplo podría ser:

    CalendarService.readCalendar(class.this, 2, 5)

    Al hacerlo devolverá una lista de eventos de +/-2 días y +/- 5 horas.

    El servicio ha sido probado, pero por favor dígame si usted experimenta cualquier problema.

    • Este código no funciona para ICS 4.1.2 (al menos en el Galaxy Note GT-N7000)
    • Ha sido probado por otros en ICS 4.2 que funcionó con éxito. Ha tenido usted un vistazo a «CalendarService.java» en la línea 59?: Utilice el cursor a continuación para Android API 4.0+ (Gracias a SLEEPLisNight)
    • Podría alguno por favor me diga cómo obtener los eventos del calendario de google en android.Me puedes obtener solo el Android calendario de eventos no sólo eventos del calendario de google.
    • recibiendo el error no such collumn calendar_id android 4.1 samsung galaxy grand
    • revise también: stackoverflow.com/questions/26844770/…
  4. 5

    Este post es un poco viejo, pero aquí es otra solución sencilla para la obtención de datos relacionados con la Calendar proveedor de contenido en Android:

    El uso de este lib: https://github.com/EverythingMe/easy-content-providers

    Y ahora, conseguir que todos los calendarios:

    CalendarProvider calendarProvider = new CalendarProvider(context);
    List<Calendar> calendars = calendarProvider.getCalendars().getList();

    Cada Calendario tiene todos los campos, así que usted puede conseguir toda la información que necesita:
    id, nombre, calendarColor, ownerAccount, accountName, calendarAccessLevel, …

    O bien, obtener todos los Eventos de calendario específico:

    List<Event> calendars = calendarProvider.getEvents(calendar.id).getList();

    Y también hay opción para obtener Recordatorios, los Asistentes, las Instancias.

    Funciona con listas o cursor y no una aplicación de ejemplo para ver cómo es y cómo funciona.
    De hecho, hay soporte para todos los Android, los proveedores de contenido como: Contactos, SMS, Llamadas, …
    Documento completo con todas las opciones: https://github.com/EverythingMe/easy-content-providers/wiki/Android-providers

    Espero que ayudó 🙂

  5. 2

    Utilizar este código de obtener el calendario de eventos de un solo día.

    public static void readCalendarEvent(Context context) throws ParseException {
    
            ContentResolver contentResolver = context.getContentResolver();
            Calendar calendar = Calendar.getInstance();
            String dtstart = "dtstart";
            String dtend = "dtend";
    
    
            SimpleDateFormat    displayFormatter = new SimpleDateFormat("MMMM dd, yyyy (EEEE)");
    
             stime=displayFormatter.format(calendar.getTime());     
    
            SimpleDateFormat startFormatter = new SimpleDateFormat("MM/dd/yy");
            String dateString = startFormatter.format(calendar.getTime());
    
            long after = calendar.getTimeInMillis();
            SimpleDateFormat formatterr = new SimpleDateFormat("hh:mm:ss MM/dd/yy");
            Calendar endOfDay = Calendar.getInstance();
            Date dateCCC = formatterr.parse("23:59:59 " + dateString);
            endOfDay.setTime(dateCCC);
    
    
    
    
    
    
        cursor = contentResolver.query(Uri.parse("content://com.android.calendar/events"), (new String[] { "calendar_id", "title", "description", "dtstart", "dtend","eventTimezone", "eventLocation" }), "(" + dtstart + ">" + after + " and " + dtend + "<" + endOfDay.getTimeInMillis() + ")", null, "dtstart ASC");
    
    
            /*String[] COLS={"calendar_id", "title", "description", "dtstart", "dtend","eventTimezone", "eventLocation"};
    
            cursor = contentResolver.query(
    
    
                    CalendarContract.Events.CONTENT_URI, COLS,null, null, null);*/
    
            gCalendar = new ArrayList<GoogleCalendar>();
            try {
    
    
                if (cursor.getCount() > 0) {
    
    
                    while (cursor.moveToNext()) {
                        GoogleCalendar googleCalendar = new GoogleCalendar();
                        gCalendar.add(googleCalendar);
                        int calendar_id = cursor.getInt(0);
                        googleCalendar.setCalendar_id(calendar_id);
                        String title = cursor.getString(1);
                        googleCalendar.setTitle(title);
                        String description = cursor.getString(2);
                        googleCalendar.setDescription(description);
                        String dtstart1 = cursor.getString(3);
                         dt=convertDate(dtstart1,"hh:mm:ss");
    
                        googleCalendar.setDtstart(dt);                  
    
                    String dtend1 = cursor.getString(4);
                        googleCalendar.setDtend(dtend1);
    
    
                        String eventTimeZone=cursor.getString(5);
                        googleCalendar.setEventTimeZone(eventTimeZone);
                        String eventlocation = cursor.getString(6);
    
                        googleCalendar.setEventlocation(eventlocation);
    
    
    
                    }
                }
            } catch (AssertionError ex) {
                ex.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea