overview notification example ejemplo anatomy android android-notifications android-pendingintent android-notification-bar

ejemplo - notifications android example



La notificación supera los antiguos Intent Extras (5)

Alternativamente, puede usar el siguiente código para generar su PendingIntent:

PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

Del documento de PendingIntent.FLAG_UPDATE_CURRENT :

Si el PendingIntent descrito ya existe, guárdelo pero reemplace sus datos adicionales con lo que está en este nuevo Intent. Esto se puede usar si está creando intentos en los que solo cambian los extras, y no le importa que las entidades que recibieron su PendingIntent anterior puedan lanzarlo con sus nuevos extras, incluso si no se les proporciona explícitamente.

Estoy creando una notificación dentro de un BroadcastReceiver a través de este código:

String ns = Context.NOTIFICATION_SERVICE; NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(ns); int icon = R.drawable.ic_stat_notification; CharSequence tickerText = "New Notification"; long when = System.currentTimeMillis(); Notification notification = new Notification(icon, tickerText, when); notification.defaults |= Notification.DEFAULT_VIBRATE; long[] vibrate = {0,100,200,200,200,200}; notification.vibrate = vibrate; notification.flags |= Notification.FLAG_AUTO_CANCEL; CharSequence contentTitle = "Title"; CharSequence contentText = "Text"; Intent notificationIntent = new Intent(context, NotificationActivity.class); notificationIntent.putExtra(Global.INTENT_EXTRA_FOO_ID, foo_id); PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); int mynotification_id = 1; mNotificationManager.notify(mynotification_id, notification);

Cuando hago clic en la notificación, abre la actividad de notificación y dentro de la actividad puedo recuperar el foo_id del paquete de intención (por ejemplo, 1)

Sin embargo, si se activa otra notificación y vuelvo a hacer clic en ella, la actividad aún recibe el valor "anterior" (1) del Intent-Bundle. Intenté borrar el paquete con clear (), pero estoy recibiendo el mismo efecto. Creo que algo está mal con mi código ...


Está enviando el mismo código de solicitud para su intens pendiente. Cambia esto:

PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);

A:

PendingIntent contentIntent = PendingIntent.getActivity(context, UNIQUE_INT_PER_CALL, notificationIntent, 0);

Los intentos no se crean si envía los mismos params. Ellos son reutilizados


Para cualquiera que busque el mejor enfoque después de mucho tiempo, todo lo que necesita para pasar el PendingIntent.FLAG_UPDATE_CURRENT como último argumento como se muestra a continuación

PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

ni siquiera necesita proporcionar una nueva identificación única.


Su código de solicitud es 0 para toda la notificación. Cambiar la siguiente línea:

PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);

Con:

PendingIntent contentIntent = PendingIntent.getActivity(context, new Random().nextInt(), notificationIntent, 0);


Usted está pasando la misma identificación. Este tipo de situación hace que una identificación de Unike sea de este tipo

int iUniqueId = (int) (System.currentTimeMillis() & 0xfffffff);

Y ponlo así

PendingIntent contentIntent = PendingIntent.getActivity(getApplicationContext(),iUniqueId, intentForNotification, 0);