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());
- ¿Recordatorio / evento basado en la ubicación de Android?
- Leer / dev / input / event en android a través del lenguaje de programación Java
- ¿Por qué mi botón no funciona en el primer clic?
- Evento de Android para el cambio de estado de conectividad de Internet
- Manejo de evento de apagado de teléfono en android
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.
- Android se conecta al evento de Internet
- Identificar qué AlertDialog activado onClick (diálogo DialogInterface, int que)
- Seguimiento de eventos de Google Analytics: longitud de cadena máxima
- Cuadro de diálogo de cancelación de sesión
- ¿Cómo puedo detectar la entrada táctil en Android?
- Android: Cerrar ventana de diálogo al tocar
- Android: ¿Dos eventos diferentes para un solo toque y una larga pulsación / doble pulsación?
- ¿Cómo recibir un evento en el cheque de chequeo de cheques de android?
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 }