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?
- Android Wear: ¿Hay alguna razón para utilizar un objeto Time en lugar de un objeto Calendar?
- ¿Hay una manera de agregar recordatorios a un nuevo evento de calendario usando Intents?
- Cómo resaltar fechas de calendario cuáles fechas provienen de la base de datos
- Obtener la fecha actual como advertencia de cadena obsoleta toGmtString () issue
- Pequeños números en CalendarView android
- Vista de la cuadrícula con el gesto y en el oyente del tecleo del artículo
- Añadir evento en el calendario no funciona
- Cómo abrir la aplicación de calendario en un calendario específico
- "Año 2038 _problema" en Google Calendar API (aplicación de Android)
- Calendario de Android Las fechas de los eventos de todo el día están desactivadas en un día para GMT + x Áreas
- Obtención de año, mes y fecha en Android
- Copia de seguridad y restauración del calendario
- Esquema de URL para activar el cliente del calendario
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;
-
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:
-
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" />
- No se puede generar APK firmado desde el estudio de Android "Error de ejecución para la tarea": packageRelease '"
- Cómo convertir datos de Firebase a objetos Java …?