24

no estaba muy seguro de cómo buscar esta ...Android PendingIntent te lleva a una actividad ya existente?

tengo una la siguiente, que se llama cada vez que se añade o elimina de mi cola de un trabajo para poner una notificación en la barra de estado:

private void showNotification() 
{ 
    int jobsize = mJobQueue.size(); 
    int icon = (jobsize == 0) ? 
     android.R.drawable.stat_sys_upload_done : 
     android.R.drawable.stat_sys_upload; 
    Notification notification = 
     new Notification(icon, "Test", System.currentTimeMillis()); 
    Intent intent = new Intent(this, FileManagerActivity.class); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0); 

    notification.flags = 
     (Notification.FLAG_SHOW_LIGHTS | Notification.FLAG_AUTO_CANCEL); 
    notification.setLatestEventInfo(this, 
     "Uploading to our servers", 
     getString((jobsize > 0) ? 
      R.string.notification_active_transfers : 
      R.string.notification_no_transfers), 
     pendingIntent); 

    mNotifyManager.notify(NOTIFICATION, notification); 
} 

como lo es ahora el comportamiento es la siguiente:

  • si el usuario cierra la sesión y le pega la notificación, todavía se abrirá una nueva FileManagerActivity pude evitar esto a partir de mi autenticación (ops!) actividad y pasar el inte Nut up en mi pila en un orden natural, es cuando la aplicación ya se está ejecutando es donde tengo dificultades.

  • si el usuario ya tiene la actividad FileManagerActivity haciendo clic en la notificación pondrá una segunda instancia sobre ella. En este caso, quiero que FileManagerActivity en ejecución reciba el foco en lugar de lanzar una nueva instancia.

¿Cómo puedo obtener el comportamiento correcto?

Respuesta

35

He hecho esto antes configurando mi Activity para usar launch mode 'singleTop' en el Manifiesto de la aplicación. Conseguirá la función deseada, utilizando la actividad existente si existe. En este caso, se llamará a onNewIntent en su actividad. .

Usted tendrá que comprobar en su FileManagerActivity para la autenticación y empezar una nueva actividad en su caso, si el usuario no está conectado a

+0

veo, por lo que probablemente debería hacer una verificación de parnoid en todas mis actividades para la autenticación no debería hacerlo? –

+0

Buena idea, sí. –

1

pienso que encajaba cuando se añaden los siguientes:

intent.setAction (Long .toString (System.currentTimeMillis()));

PendingIntent.FLAG_UPDATE_CUR

Intent intent = new Intent(context, MyOwnActivity.class); 
intent.putExtra("foo_bar_extra_key", "foo_bar_extra_value"); 
intent.setAction(Long.toString(System.currentTimeMillis())); 
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,intent,PendingIntent.FLAG_UPDATE_CURRENT); 
+3

PendingIntent.FLAG_UPDATE_CURRENT reemplaza el intento pendiente si ya había uno en cola en el sistema. No tiene ningún efecto al reiniciar la última actividad. – ricosrealm

+1

intent.setAction (Long.toString (System.currentTimeMillis())); TRABAJA COMO UN HOMBRE ENCANTADOR, GRACIAS BUDDY –

Cuestiones relacionadas