2011-09-09 30 views
14

En general, cuando tengo un mensaje de notificación en la barra de notificaciones y hago clic en él. Abre la aplicación registrada para ese mensaje.¿Cómo determinar si la aplicación de Android está abierta desde el mensaje de notificación?

En la actividad de inicio, ¿cómo determinar si la aplicación está abierta?

y mucho mejor ¿Cómo recuperar la identificación de la notificación en el método OnCreate()?

actualización: desde @Ovidiu - aquí está mi código para putExtra para empujar

 Notification notification = new Notification(icon, tickerText, System.currentTimeMillis()); 
     notification.contentView = contentView; 

     Intent notificationIntent = new Intent(this, Startup.class); 
     notificationIntent.putExtra("JOBID", jobId); 

     PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_ONE_SHOT); 

     notification.flags = Notification.FLAG_AUTO_CANCEL; 
     notification.contentIntent = contentIntent; 


     mNotificationManager.notify(jobId, notification); 

y sobre la actividad principal de código "Startup.java" es

Intent intent = this.getIntent(); 
    if (intent != null && intent.getExtras() != null && intent.getExtras().containsKey("JOBID")) { 
     int jobID = this.getIntent().getExtras().getInt("JOBID"); 

     if (jobID > 0) { 

     } 
    } 

intent.getExtras() siempre devuelve nulo. Resulta que necesito pasar PendingIntent.FLAG_ONE_SHOT. ¡Ahora se pasa!

+0

"necesita pasar PendingIntent.FLAG_ONE_SHOT" - fue realmente útil. Pero necesita verificar otra cosa, si esta actividad proviene de la historia. Verifique mi respuesta a continuación. – Khobaib

Respuesta

14

Es necesario utilizar putExtra(ID_KEY,id) al crear su Intent para el inicio de su aplicación, y en su método de onCreate() se puede utilizar para recuperar su getIntent().getExtras().getInt(ID_KEY); Identificación del pasado integer.

+1

Tenga en cuenta que a menos que su nuevo intento devuelva .equals() == falso en comparación con el último intento utilizado, se utilizará el último intento. Los extras no se consideran en .equals, por lo que debe establecer algún identificador único en setAction o similar. – RunLoop

+0

¿Qué pasa si la notificación proviene de la nube de Google? getIntent() siempre devuelve nulo en mi caso. – Josh

5

El código de la Actividad de inicio sería el siguiente; de ​​lo contrario, una vez que proceda de la notificación de GCM, cada vez que la Actividad provenga de la lista Reciente, indicará que proviene de la notificación de GCM, lo cual es incorrecto.

Intent intent = this.getIntent(); 
if (intent != null && intent.getExtras() != null && intent.getExtras().containsKey("JOBID") && (intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0) { 
    int jobID = this.getIntent().getExtras().getInt("JOBID"); 

    if (jobID > 0) { 

    } 
} 
0

tuve el mismo problema, y ​​yo no entiendo por qué tengo que usar el método putExtra ... Así que resolverse así: cuando se recibe una notificación y pulsa sobre él, la aplicación se abrirá (generalmente abre la actividad principal de la aplicación) y, en los extras, puede encontrar información sobre esa notificación. Puede agregar parámetros clave/valor a las notificaciones que está enviando a los dispositivos registrados. Estos parámetros se agregarán a los extras de intención.

Para que pueda actuar así: en su notificación, agregue un parámetro que represente su identificación de notificación. Para esample "messageId" -> "abc", donde abc es su identificador de notificación.

Luego, en su actividad principal, se puede hacer:

if (getIntent().getExtras().keySet().contains("messageId")) { 
    // you opened the app from a notification 
    String messageId = getIntent().getStringExtra("messageId") 
    // do domething... 
} else { 
    // you opened the app normally 
    // do domething... 
} 

Y se va a recuperar el identificador de la notificación. Para que pueda usar esta información para, por ejemplo, obtener la notificación de su base de datos u otras operaciones.

Cuestiones relacionadas