Para algunas aplicaciones de Android, me gustaría integrar la siguiente función: El usuario puede definir una hora en la que quiere que se le recuerde algo. Cuando llegue el momento, la aplicación debería crear una notificación en la barra de notificaciones, incluso cuando el usuario no use la aplicación en este momento.Crear notificación cronometrada (por ejemplo, para eventos) en Android
Para este propósito, las clases AlarmManager, NotificationManager y Notification.Builder son las que hay que mirar, ¿no?
Entonces, ¿cómo puedo crear una notificación cronometrada por adelantado? Mi código (hasta ahora) es la siguiente:
Añadir esto bajo la AndroidManifest para registrar el receptor de radiodifusión:
<receiver android:name="AlarmNotificationReceiver"></receiver>
Crear un nuevo archivo de clase que se encarga de la alarma que recibe:
public class AlarmNotificationReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
if (extras != null) {
String additionalData = extras.getString("displayText");
// show the notification now
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification mNotification = new Notification(R.drawable.ic_launcher, context.getString(R.string.app_name), System.currentTimeMillis());
PendingIntent pi = PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), 0); // open MainActivity if the user selects this notification
mNotification.setLatestEventInfo(context, context.getString(R.string.app_name), additionalData, pi);
mNotification.flags |= Notification.FLAG_AUTO_CANCEL | Notification.DEFAULT_SOUND;
mNotificationManager.notify(1, mNotification);
}
}
}
utilizar este código (por ejemplo, en MainActivity) para ajustar la alarma a 3 segundos a partir de ahora:
Intent i = new Intent(this, AlarmNotificationReceiver.class);
i.putExtra("displayText", "sample text");
PendingIntent pi = PendingIntent.getBroadcast(this.getApplicationContext(), 234324246, i, 0);
AlarmManager mAlarm = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
mAlarm.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+3*1000, pi);
¿Qué necesito cambiar para que esto funcione? ¡Gracias!
Los dos problemas son:
- texto de la notificación no cambia cuando lo cambio en el código. Solo cambia cuando cambio el requestCode en PendingIntent.getBroadcast (...). ¿De qué se trata este código de solicitud? ¿Puede ser un valor aleatorio o 0?
- Después de reiniciar mi teléfono, la notificación "planificada" o la alarma desaparecen. Pero ahora he visto que esto es un comportamiento normal, ¿verdad? ¿Cómo puedo eludir esto?
¿Qué no funciona hasta ahora? –