2011-07-05 16 views
11

Estoy creando una notificación para la bandeja de notificaciones. Estoy especificando un clic intención de esta manera:¡No se puede eliminar el intento adicional!

clase
Intent intent = new Intent(context, MyActivity.class); 
intent.putExtra("foo", true); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
intent.setData(Uri.parse("" + System.currentTimeMillis())); 

El MyActivity se puso en marcha muy bien con el "foo" parámetro actual. Sin embargo, no puede deshacerse de ese extra después - que parece persistir en el intento:

// MyActivity 
public void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 

    // please go away.. 
    intent.removeExtra("foo"); 
    getIntent().removeExtra("foo"); 
} 

iterar sobre las claves de la intención demuestra que "foo" ya no existe. Pero si hago un seguimiento de la actividad y la vuelvo a poner en primer plano, el parámetro "foo" vuelve a estar presente.

¿Alguien sabe cómo deshacerse de él? También intenté llamar a setIntent(), el mismo comportamiento. Es como si el lanzador mantuviera el intento original y lo sigue reutilizando.

Gracias

+0

Este es uno de los casos tontos con Java y punteros. Es posible que deba intentar finalizar el intento original después de copiarlo sin foo. – hwrdprkns

+0

Ah, ¿cómo se puede finalizar el intento original? ¿Haría algo como call finish() de onNewIntent() y simplemente volvería a iniciar la actividad? Supongo que el usuario no vería el salto furtivo, y me desharía de ese "foo" extra. ¡Creo que podría funcionar! – user291701

+0

'Intent.finalize()'? – hwrdprkns

Respuesta

0

Eso es exactamente lo que está haciendo Android. La modificación del parámetro de intención dentro del método onNewIntent no tiene ningún efecto en el intento almacenado del sistema de notificación. Debe crear un nuevo Intent y almacenarlo localmente en su actividad, guardarlo y restaurarlo como cualquier otro dato.

EDITAR: Si no necesita reutilizar el intento en sí mismo, probablemente tendría más sentido almacenar los datos relevantes por separado.

+0

Huh No lo sigo del todo. ¿Quiere crear un nuevo Intent y llamar a setIntent() con él? (parece dar el mismo comportamiento). De lo contrario, tenemos que gestionar este estado, supongo? Gracias – user291701

+0

¿Estás intentando volver a poner el intento en la barra de notificaciones con el cambio extra? Creo que lo correcto sería crear un nuevo intento y una nueva notificación. – robamaton

+7

Sí exactamente: deseo eliminar ese intento adicional, y la próxima vez que el usuario inicie desde el iniciador, quiero que ese extra desaparezca. Intenté crear una nueva notificación y llamé a setIntent() con ella, pero el mismo comportamiento: la clave "foo" vuelve para atormentarme. – user291701

Cuestiones relacionadas