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


Evento de sincronización agregado mediante programación con google calendar en android

Estoy intentando agregar un evento al calendario de Android, y especifico que el evento se agregará al calendario de gmail para sincronizar automáticamente con el calendario de Google. El problema es que los eventos añadidos por programación no se sincronizan con el calendario de Google, pero si lo agrego manual en el teléfono sincroniza con el calendario de Google. No sé por qué.

Este es el código que utilizo para agregar el evento:

ArrayList<MyCalendar> calendars = new ArrayList<MyCalendar>(); String[] projection = new String[] { "_id", "name" }; Uri calUri = getCalendarURI(false); Cursor managedCursor = managedQuery(calUri, projection, "selected=1", null, null); String calName = null; String calId = null; if (managedCursor.moveToFirst()) { int nameColumn = managedCursor.getColumnIndex("name"); int idColumn = managedCursor.getColumnIndex("_id"); do { calName = managedCursor.getString(nameColumn); calId = managedCursor.getString(idColumn); calendars.add(new MyCalendar(Integer.parseInt(calId), calName)); } while (managedCursor.moveToNext()); } Toast.makeText(getBaseContext(), calName + " " + calId, Toast.LENGTH_LONG).show(); Calendar cal = Calendar.getInstance(); ContentValues event = new ContentValues(); event.put("calendar_id", 2); event.put("title", "Test Event2"); event.put("description", "Hiii Buddy"); long startTime = cal.getTimeInMillis(); long endTime = cal.getTimeInMillis() + 60 * 60 * 1000; event.put("dtstart", startTime); event.put("dtend", endTime); event.put("allDay", 0); event.put("eventStatus", 1);// tentative 0, confirmed 1 canceled 2 event.put("visibility", 3);// default 0 confidential 1 private 2 // public 3 event.put("transparency", 0);// opaque 0 transparent 1 event.put("hasAlarm", 1); // 0 false, 1 true Uri eventsUri = getCalendarURI(true); Uri url = getContentResolver().insert(eventsUri, event); 

Así que el evento se agregó con éxito al calendario, pero no se muestra en el calendario de Google en la web (no sincronizar), pero si agrego el evento de forma manual que hace la sincronización!

  • Cómo adjuntar datos privados al evento de calendario android
  • Android: ¿Cómo interactuar con Google Calendar?
  • ¿Cómo usar google calendar api en android?
  • Autenticación con la API de Google mediante AccountManager
  • ¿Cómo puedo averiguar el resultado de mi intención de calendario?
  • Buscando el código fuente de los nuevos Widgets del selector de tiempo y fecha de Google Calendar
  • ¿Cómo agregar un evento en Google Calendar desde la actividad?
  • Sincronización desde el calendario del teléfono Android a Google Calendar en la Web sin utilizar Google Calendar Data API. es posible?
  • 3 Solutions collect form web for “Evento de sincronización agregado mediante programación con google calendar en android”

    Puedes sincronizar tu evento después de añadirlo por esta función, Ha funcionado para mí (en API 8 y posteriores):

     public static void syncCalendar(Context context, String calendarId) { ContentResolver cr = context.getContentResolver(); ContentValues values = new ContentValues(); values.put(CalendarContract.Calendars.SYNC_EVENTS, 1); values.put(CalendarContract.Calendars.VISIBLE, 1); cr.update( ContentUris.withAppendedId(getCalendarUri(), Long.parseLong(calendarId)), values, null, null); } 

    Pruebe este código para insertar un evento en el calendario de Android, así como en Google Calendar:

      ContentValues values = new ContentValues(); cal_id = String.valueOf(p1); values.put("calendar_id", p1); values.put("title", title1); values.put("allDay", 0); values.put("dtstart", settime); values.put("dtend", cal.getTimeInMillis()+60*60*1000); values.put("description", desc1); values.put("visibility", 0); values.put("transparency", 0); values.put("hasAttendeeData", 1); values.put("hasAlarm", 0); event = cr.insert(EVENTS_URI, values); event1=event; dat1 = event.toString(); long id=-1; if (event != null) { id = Long.parseLong(event.getLastPathSegment()); ContentValues values1 = new ContentValues(); values1.put("event_id", id); values1.put("method", 1); //METHOD_ALERT Uri reminder = Uri.parse(getCalendarUriBase(this) + "reminders"); this.getContentResolver().insert(reminder, values1); if(s.length() > 0 || partmail.length() > 0) { //REQUIRES FOLLOWING CODE 

    Este código se utiliza para agregar el evento sincronizado al calendario de google

      ContentValues attendees = new ContentValues(); attendees.put("event_id", id); attendees.put("attendeeEmail", partmail1); attendees.put("attendeeRelationship", 2);//RELATIONSHIP_ATTENDEE attendees.put("attendeeStatus", 3); //ATTENDEE_STATUS_INVITED attendees.put("attendeeType", 1); //TYPE_REQUIRED id1=(int)id; alarmid = (int) id; Uri attendeesUri = null; if (Integer.parseInt(Build.VERSION.SDK) >= 8 ) { attendeesUri = Uri.parse("content://com.android.calendar/attendees"); } else if(Integer.parseInt(Build.VERSION.SDK) < 8) { attendeesUri = Uri.parse("content://calendar/attendees"); } this.getContentResolver().insert(attendeesUri, attendees); Toast.makeText(this, "Task Scheduled Successfully", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "Could not create Task!", Toast.LENGTH_SHORT); } // reminder insert Uri REMINDERS_URI = Uri.parse(getCalendarUriBase(this) + "reminders"); values = new ContentValues(); values.put( "event_id", id); values.put( "method", 1 ); values.put( "minutes", 0 ); cr.insert( REMINDERS_URI, values ); 

    Obtenga el Uri del calendario, ya que es diferente para los niveles de API, como hasta 8, mayor que 8 y mayor que 11.

     private String getCalendarUriBase(Context con) { String calendarUriBase = null; Uri calendars = Uri.parse("content://calendar/calendars"); Cursor managedCursor = null; try { managedCursor = managedQuery(calendars, null, null, null, null); } catch (Exception e) { // eat } if (managedCursor != null) { calendarUriBase = "content://calendar/"; } else { calendars = Uri.parse("content://com.android.calendar/calendars"); try { managedCursor = managedQuery(calendars, null, null, null, null); } catch (Exception e) { // statement to print the stacktrace } if (managedCursor != null) { calendarUriBase = "content://com.android.calendar/"; } } return calendarUriBase; 

    }

    Utilice el api de calendario google proporcionado aquí

    La referencia anterior es algo general ya que Android no proporciona una API oficial. Por lo tanto, otra solución más específica de Android es un Android Tutorial-Programación con Calendario

    Que contiene un ejemplo de trabajo también. También, tenga cuidado en la Declaración de permiso, como READ_CALENDAR, WRITE_CALENDAR

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.