Puedo encontrar una manera de enviar parámetros a mi actividad desde mi notificación.
Tengo un servicio que crea una notificación. Cuando el usuario hace clic en la notificación, quiero abrir mi actividad principal con algunos parámetros especiales. Por ejemplo, una identificación de elemento, por lo que mi actividad puede cargar y presentar una vista de detalle de elemento especial. Más específicamente, estoy descargando un archivo, y cuando se descarga el archivo, quiero que la notificación tenga la intención de que, al hacer clic, abra mi actividad en un modo especial. He intentado usarlo putExtra
en mi intento, pero parece que no puedo extraerlo, así que creo que lo estoy haciendo mal.
Código de mi servicio que crea la Notificación:
// construct the Notification object.
final Notification notif = new Notification(R.drawable.icon, tickerText, System.currentTimeMillis());
final RemoteViews contentView = new RemoteViews(context.getPackageName(), R.layout.custom_notification_layout);
contentView.setImageViewResource(R.id.image, R.drawable.icon);
contentView.setTextViewText(R.id.text, tickerText);
contentView.setProgressBar(R.id.progress,100,0, false);
notif.contentView = contentView;
Intent notificationIntent = new Intent(context, Main.class);
notificationIntent.putExtra("item_id", "1001"); // <-- HERE I PUT THE EXTRA VALUE
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
notif.contentIntent = contentIntent;
nm.notify(id, notif);
Código de mi actividad que intenta obtener el parámetro adicional de la notificación:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Bundle extras = getIntent().getExtras();
if(extras != null){
Log.i( "dd","Extra:" + extras.getString("item_id") );
}
Los extras siempre son nulos y nunca pongo nada en mi registro.
Por cierto ... el onCreate
solo se ejecuta cuando comienza mi actividad, si mi actividad ya ha comenzado, también quiero recopilar los extras y presentar mi actividad de acuerdo con el item_id que recibo.
¿Algunas ideas?
fuente
PendingIntent.getActivity()
con la banderaPendingIntent.FLAG_UPDATE_CURRENT
, de lo contrario, se reutilizarán los mismos extras para cada notificación.PendingIntent.getActivity()
además de configurarloFLAG_ACTIVITY_SINGLE_TOP
enIntent
yFLAG_UPDATE_CURRENT
en elPendingIntent
. Ver stackoverflow.com/questions/7370324/…Tuve el mismo problema, mi aplicación muestra notificaciones de mensajes. Cuando hay varias notificaciones y al hacer clic en cada notificación, muestra los detalles de la notificación en una actividad de visualización de mensajes. Resolví el problema de que se están recibiendo los mismos parámetros adicionales en la intención del mensaje de vista.
Aquí está el código que solucionó esto. Código para crear la intención de notificación.
Código para ver la actividad del mensaje.
fuente
Tal vez un poco tarde, pero: en lugar de esto:
Utilizar este:
fuente
Encuentra el mismo problema aquí. Lo resuelvo usando un código de solicitud diferente, uso la misma identificación que la notificación, mientras creo PendingIntent. pero aún no sé por qué debería hacerse esto.
fuente
Después de leer algunas listas de correo electrónico y otros foros, descubrí que el truco parece agregar algunos datos únicos a la intención.
Me gusta esto:
No entiendo por qué esto debe hacerse, tiene algo que ver con la intención, no se puede identificar solo por sus extras ...
fuente
Intenté todo pero nada funcionó.
finalmente se le ocurrió la siguiente solución.
1- en manifiesto agregar para la actividad android: launchMode = "singleTop"
2- mientras realiza una intención pendiente, haga lo siguiente, use el paquete en lugar de usar directamente intent.putString () o intent.putInt ()
fuente
AndroidManifest.xml
Incluir launchMode = "singleTop"
SMSReceiver.java
Establezca las banderas para Intent y PendingIntent
MessageDetailsActivity.java
onResume (): se llama cada vez que se cargan los extras.
Espero que ayude, se basó en otras respuestas aquí en stackoverflow, pero esta es la más actualizada que funcionó para mí.
fuente
¡Es fácil, esta es mi solución usando objetos!
Mi POJO
Notificación de método
Nueva actividad
¡¡Buena suerte!!
fuente
Después de hacer una búsqueda, obtuve una solución de la guía para desarrolladores de Android
Para obtener un valor adicional de intención en la clase de actividad de prueba, debe escribir el siguiente código:
fuente
stackBuilder
para?En su implementación de notificación, use un código como este:
Para obtener valores adicionales de intención en ExampleActivity, use el siguiente código:
NOTA MUY IMPORTANTE: el método Intent :: putExtra () es sobrecargado. Para obtener la clave adicional, debe usar Intent :: get [Type] Extra () método .
Nota: NOTIFICATION_ID y NOTIFICATION_CHANNEL_ID son constantes declaradas en ExampleActivity
fuente
G'day, yo también puedo decir que probé todo lo mencionado en estas publicaciones y algunas más de otros lugares. El problema número 1 para mí fue que la nueva intención siempre tenía un paquete nulo. Mi problema fue centrarme demasiado en los detalles de "he incluido .esto o eso". Mi solución fue dar un paso atrás de los detalles y observar la estructura general de la notificación. Cuando hice eso, logré colocar las partes clave del código en la secuencia correcta. Entonces, si tiene problemas similares, busque:
// Me gusta especificar el tipo de datos mucho mejor. ej. bundle.putInt
Con esta secuencia obtengo un paquete válido.
fuente
Si utiliza
en su archivo AndroidManifest.xml para que se inicie la Actividad, debe usar lo siguiente en su intención:
Importante es establecer datos únicos, por ejemplo, usando una identificación única como:
fuente
para uso de servicios
PendingIntent.FLAG_UPDATE_CURRENT
para mi trabajo
fuente
Úselo como PendingIntent mientras muestra la notificación de lo que se resolverá.
PendingIntent intent = PendingIntent.getActivity (this, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Agregue PendingIntent.FLAG_UPDATE_CURRENT como último campo.
fuente