Cómo configurar un recordatorio en Android?

Estoy intentando crear una aplicación de calendario para Android. Estoy impresionado en el medio. He conseguido recuperar la información tal como hora y tarea del usuario.

No sé cómo añadir esto a los eventos de Android. ¿Hay algo como setEvent o algo similar?

Nope, es más complicado que simplemente llamar a un método, si desea agregarlo de forma transparente en el calendario del usuario.

Tienes un par de opciones;

  1. Llamar a la intención de agregar un evento en el calendario
    Esto mostrará la aplicación Calendario y permitirá que el usuario añada el evento. Puede pasar algunos parámetros a los campos pre-poblados:

     Calendar cal = Calendar.getInstance(); Intent intent = new Intent(Intent.ACTION_EDIT); intent.setType("vnd.android.cursor.item/event"); intent.putExtra("beginTime", cal.getTimeInMillis()); intent.putExtra("allDay", false); intent.putExtra("rrule", "FREQ=DAILY"); intent.putExtra("endTime", cal.getTimeInMillis()+60*60*1000); intent.putExtra("title", "A Test Event from android app"); startActivity(intent); 

    O la más complicada:

  2. Obtener una referencia al calendario con este método
    (Se recomienda no usar este método, ya que podría romperse en versiones más recientes de Android):

     private String getCalendarUriBase(Activity act) { String calendarUriBase = null; Uri calendars = Uri.parse("content://calendar/calendars"); Cursor managedCursor = null; try { managedCursor = act.managedQuery(calendars, null, null, null, null); } catch (Exception e) { } if (managedCursor != null) { calendarUriBase = "content://calendar/"; } else { calendars = Uri.parse("content://com.android.calendar/calendars"); try { managedCursor = act.managedQuery(calendars, null, null, null, null); } catch (Exception e) { } if (managedCursor != null) { calendarUriBase = "content://com.android.calendar/"; } } return calendarUriBase; } 

    Y agregue un evento y un recordatorio de esta manera :

     // get calendar Calendar cal = Calendar.getInstance(); Uri EVENTS_URI = Uri.parse(getCalendarUriBase(this) + "events"); ContentResolver cr = getContentResolver(); // event insert ContentValues values = new ContentValues(); values.put("calendar_id", 1); values.put("title", "Reminder Title"); values.put("allDay", 0); values.put("dtstart", cal.getTimeInMillis() + 11*60*1000); // event starts at 11 minutes from now values.put("dtend", cal.getTimeInMillis()+60*60*1000); // ends 60 minutes from now values.put("description", "Reminder description"); values.put("visibility", 0); values.put("hasAlarm", 1); Uri event = cr.insert(EVENTS_URI, values); // reminder insert Uri REMINDERS_URI = Uri.parse(getCalendarUriBase(this) + "reminders"); values = new ContentValues(); values.put( "event_id", Long.parseLong(event.getLastPathSegment())); values.put( "method", 1 ); values.put( "minutes", 10 ); cr.insert( REMINDERS_URI, values ); 

    También necesitará agregar estos permisos a su manifiesto para este método:

     <uses-permission android:name="android.permission.READ_CALENDAR" /> <uses-permission android:name="android.permission.WRITE_CALENDAR" /> 

Actualización: ICS Issues

Los ejemplos anteriores utilizan las API de calendario indocumentadas, se han publicado nuevas API de calendario públicas para ICS, por lo que por esta razón, para orientar nuevas versiones de Android, debe utilizar CalendarContract .

Más información sobre esto se puede encontrar en esta entrada del blog .

Usted puede utilizar AlarmManager en cooperación con mecanismo de notificación Algo como esto:

 Intent intent = new Intent(ctx, ReminderBroadcastReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(ctx, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager am = (AlarmManager) ctx.getSystemService(Activity.ALARM_SERVICE); // time of of next reminder. Unix time. long timeMs =... if (Build.VERSION.SDK_INT < 19) { am.set(AlarmManager.RTC_WAKEUP, timeMs, pendingIntent); } else { am.setExact(AlarmManager.RTC_WAKEUP, timeMs, pendingIntent); } 

Se inicia la alarma.

 public class ReminderBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { NotificationCompat.Builder builder = new NotificationCompat.Builder(context) .setSmallIcon(...) .setContentTitle(..) .setContentText(..); Intent intentToFire = new Intent(context, Activity.class); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intentToFire, PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(pendingIntent); NotificationManagerCompat.from(this);.notify((int) System.currentTimeMillis(), builder.build()); } } 

Código completo de Android para agregar eventos y recordatorios.

 /** Adds Events and Reminders in Calendar. */ private void addReminderInCalendar() { Calendar cal = Calendar.getInstance(); Uri EVENTS_URI = Uri.parse(getCalendarUriBase(true) + "events"); ContentResolver cr = getContentResolver(); TimeZone timeZone = TimeZone.getDefault(); /** Inserting an event in calendar. */ ContentValues values = new ContentValues(); values.put(CalendarContract.Events.CALENDAR_ID, 1); values.put(CalendarContract.Events.TITLE, "Sanjeev Reminder 01"); values.put(CalendarContract.Events.DESCRIPTION, "A test Reminder."); values.put(CalendarContract.Events.ALL_DAY, 0); // event starts at 11 minutes from now values.put(CalendarContract.Events.DTSTART, cal.getTimeInMillis() + 1 * 60 * 1000); // ends 60 minutes from now values.put(CalendarContract.Events.DTEND, cal.getTimeInMillis() + 2 * 60 * 1000); values.put(CalendarContract.Events.EVENT_TIMEZONE, timeZone.getID()); values.put(CalendarContract.Events.HAS_ALARM, 1); Uri event = cr.insert(EVENTS_URI, values); // Display event id. Toast.makeText(getApplicationContext(), "Event added :: ID :: " + event.getLastPathSegment(), Toast.LENGTH_SHORT).show(); /** Adding reminder for event added. */ Uri REMINDERS_URI = Uri.parse(getCalendarUriBase(true) + "reminders"); values = new ContentValues(); values.put(CalendarContract.Reminders.EVENT_ID, Long.parseLong(event.getLastPathSegment())); values.put(CalendarContract.Reminders.METHOD, Reminders.METHOD_ALERT); values.put(CalendarContract.Reminders.MINUTES, 10); cr.insert(REMINDERS_URI, values); } /** Returns Calendar Base URI, supports both new and old OS. */ private String getCalendarUriBase(boolean eventUri) { Uri calendarURI = null; try { if (android.os.Build.VERSION.SDK_INT <= 7) { calendarURI = (eventUri) ? Uri.parse("content://calendar/") : Uri.parse("content://calendar/calendars"); } else { calendarURI = (eventUri) ? Uri.parse("content://com.android.calendar/") : Uri .parse("content://com.android.calendar/calendars"); } } catch (Exception e) { e.printStackTrace(); } return calendarURI.toString(); } 

Añada permiso a su archivo de manifiesto.

 <uses-permission android:name="android.permission.READ_CALENDAR" /> <uses-permission android:name="android.permission.WRITE_CALENDAR" /> 
  • Java.lang.IllegalArgumentException: Clase incorrecta: class java.util.GregorianCalendar
  • Leer y escribir el calendario
  • Crear un servicio programado en android
  • Agregar evento semanal al calendario
  • Cómo editar los eventos del calendario a través de la aplicación android
  • Calendario que me da la hora y el minuto incorrectos
  • Cómo crear / utilizar un calendario dentro de una aplicación de Android (no como un intento)
  • Crear un evento repetitivo con recordatorio hasta el día específico sin Intent en Android?
  • Java comprobar si la fecha es el primer domingo del mes
  • ¿Cómo consultar los nuevos recordatorios de la aplicación de calendario para Android?
  • Android Formato de fecha con zona horaria
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.