Agregar evento con recordatorios al calendario con la forma 'Intent.putExtra ()' de hacer

Estoy intentando agregar acontecimientos al calendario con el código siguiente:

public Intent calPopulation() { Intent calIntent = new Intent(Intent.ACTION_INSERT); calIntent.setType("vnd.android.cursor.item/event"); calIntent.putExtra(CalendarContract.Events.TITLE, this._title); GregorianCalendar calDate = new GregorianCalendar(this._year,this._month, this._day, this._hour, this._minute); calIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, calDate.getTimeInMillis()); calIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, calDate.getTimeInMillis()+60*60*1000); calIntent.putExtra(CalendarContract.Events.HAS_ALARM, true); calIntent.putExtra(CalendarContract.Reminders.EVENT_ID, CalendarContract.Events._ID); calIntent.putExtra(CalendarContract.Events.ALLOWED_REMINDERS, "METHOD_DEFAULT"); calIntent.putExtra(CalendarContract.Reminders.METHOD, CalendarContract.Reminders.METHOD_ALERT); calIntent.putExtra(CalendarContract.Reminders.MINUTES,5); return calIntent; } 

Y luego iniciar la acción con: startActivity(mTask.calPopulation());

No tengo ningún problema, el evento de la aplicación de calendario se inició con la información correcta que ingresé en mi aplicación, excepto que no completa el evento el recordatorio que me gustaría añadir.

¿Tiene alguna pista? Intenté buscar dentro de muchos hilos usando este método (me refiero a la intención.putExtra) pero nunca encuentro nada interesante.

Otro punto, ¿hay una manera de guardar directamente el evento + recordatorio en el calendario sin abrir la aplicación de calendario y solicitar la acción del usuario?

Gracias por adelantado. Alex.

Ninguna respuesta según el método que señalé, pero otra manera encontré para agregar acontecimiento con recordatorios al calendario.

Los métodos siguientes funcionan bien para mí:

 // Add an event to the calendar of the user. public void addEvent(Context context) { GregorianCalendar calDate = new GregorianCalendar(this._year, this._month, this._day, this._hour, this._minute); try { ContentResolver cr = context.getContentResolver(); ContentValues values = new ContentValues(); values.put(CalendarContract.Events.DTSTART, calDate.getTimeInMillis()); values.put(CalendarContract.Events.DTEND, calDate.getTimeInMillis()+60*60*1000); values.put(CalendarContract.Events.TITLE, this._title); values.put(CalendarContract.Events.CALENDAR_ID, 1); values.put(CalendarContract.Events.EVENT_TIMEZONE, Calendar.getInstance() .getTimeZone().getID()); System.out.println(Calendar.getInstance().getTimeZone().getID()); Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, values); // Save the eventId into the Task object for possible future delete. this._eventId = Long.parseLong(uri.getLastPathSegment()); // Add a 5 minute, 1 hour and 1 day reminders (3 reminders) setReminder(cr, this._eventId, 5); setReminder(cr, this._eventId, 60); setReminder(cr, this._eventId, 1440); } catch (Exception e) { e.printStackTrace(); } } // routine to add reminders with the event public void setReminder(ContentResolver cr, long eventID, int timeBefore) { try { ContentValues values = new ContentValues(); values.put(CalendarContract.Reminders.MINUTES, timeBefore); values.put(CalendarContract.Reminders.EVENT_ID, eventID); values.put(CalendarContract.Reminders.METHOD, CalendarContract.Reminders.METHOD_ALERT); Uri uri = cr.insert(CalendarContract.Reminders.CONTENT_URI, values); Cursor c = CalendarContract.Reminders.query(cr, eventID, new String[]{CalendarContract.Reminders.MINUTES}); if (c.moveToFirst()) { System.out.println("calendar" + c.getInt(c.getColumnIndex(CalendarContract.Reminders.MINUTES))); } c.close(); } catch (Exception e) { e.printStackTrace(); } } // function to remove an event from the calendar using the eventId stored within the Task object. public void removeEvent(Context context) { ContentResolver cr = context.getContentResolver(); int iNumRowsDeleted = 0; Uri eventsUri = Uri.parse(CALENDAR_URI_BASE+"events"); Uri eventUri = ContentUris.withAppendedId(eventsUri, this._eventId); iNumRowsDeleted = cr.delete(eventUri, null, null); Log.i(DEBUG_TAG, "Deleted " + iNumRowsDeleted + " calendar entry."); } public int updateEvent(Context context) { int iNumRowsUpdated = 0; GregorianCalendar calDate = new GregorianCalendar(this._year, this._month, this._day, this._hour, this._minute); ContentValues event = new ContentValues(); event.put(CalendarContract.Events.TITLE, this._title); event.put("hasAlarm", 1); // 0 for false, 1 for true event.put(CalendarContract.Events.DTSTART, calDate.getTimeInMillis()); event.put(CalendarContract.Events.DTEND, calDate.getTimeInMillis()+60*60*1000); Uri eventsUri = Uri.parse(CALENDAR_URI_BASE+"events"); Uri eventUri = ContentUris.withAppendedId(eventsUri, this._eventId); iNumRowsUpdated = context.getContentResolver().update(eventUri, event, null, null); // TODO put text into strings.xml Log.i(DEBUG_TAG, "Updated " + iNumRowsUpdated + " calendar entry."); return iNumRowsUpdated; } 

Espero que esto podría ayudar a otros que encontró el mismo problema que tuve :).

Alex.

De acuerdo con la respuesta anterior, pero la importación es Id de calendario. Usted no puede utilizar 1 como el teléfono samsung utiliza 1 para su calendario (S Planner). Así calender ID es id para qué correo electrónico desea evento. Usted puede conseguir la identificación del calendario siguiendo el código para el acontecimiento específico

 int calenderId=-1; String calenderEmaillAddress="[email protected]"; String[] projection = new String[]{ CalendarContract.Calendars._ID, CalendarContract.Calendars.ACCOUNT_NAME}; ContentResolver cr = activity.getContentResolver(); Cursor cursor = cr.query(Uri.parse("content://com.android.calendar/calendars"), projection, CalendarContract.Calendars.ACCOUNT_NAME + "=? and (" + CalendarContract.Calendars.NAME + "=? or " + CalendarContract.Calendars.CALENDAR_DISPLAY_NAME + "=?)", new String[]{calenderEmaillAddress, calenderEmaillAddress, calenderEmaillAddress}, null); if (cursor.moveToFirst()) { if (cursor.getString(1).equals(calenderEmaillAddress)) calenderId=cursor.getInt(0); //youre calender id to be insered in above answer } 
  • ¿Diferencia entre los métodos onKey (), OnKeyDown () y dispatchKeyEvent () proporcionados por Android?
  • Obtener la vista que está recibiendo todos los eventos táctiles
  • Una forma fiable de saber cuándo se resiste el teclado virtual de Android (devolución de llamada que funciona en todos los teléfonos)
  • ¿Cómo consultar eventos de calendario de android para un intervalo de fechas específico?
  • Notificación Haga clic en no iniciar la Actividad dada en los teléfonos Nexus
  • Auditores de eventos de Android para audio
  • Prueba de la unidad MVP de Android: ¿debo burlar el bus de eventos?
  • Inyección de caracteres no ingleses en Android
  • Establecer la posición dinámica de brindis en una vista
  • Superponer un color sobre una vista
  • ¿Cómo obtener un evento táctil continuo?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.