2011-02-01 10 views
13

poco de un problema confuso para mí aquí:Android: aplicación A partir de las últimas aplicaciones '' comienza con el último conjunto de extras utilizados en un intento

Tengo un widget de pantalla de inicio que, cuando se hace clic, comienza mi actividad principal aplicación con algunos extras puesto en la intención:

Intent start = new Intent(context, Main.class); 
start.putExtra("action", "showXYZ"); 
start.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(start); 

todo esto funciona bien, se inicia mi actividad y mi actividad recibe los extras como se esperaba. Procesa estos extras y comienza otra actividad.

Una vez que un usuario ha hecho clic en el widget de la pantalla de inicio y ha iniciado la actividad Principal de esta manera, al acceder a la aplicación mediante el método 'Aplicaciones recientes' (manteniendo presionada la tecla 'inicio') comienza la actividad Principal con los extras: causando el procesamiento que no quiero (y que lleva a que se abra la segunda actividad, en lugar de solo mostrar la actividad principal).

¿Hay alguna solución temporal para esto? Al iniciar la aplicación desde el método de "aplicaciones recientes", simplemente quiero iniciar la actividad Principal sin el último conjunto de extras.

¡Muchas gracias por la ayuda! R3MO

Nota: Estoy en android 1.5

EDIT:

encontrado una solución aquí: Android keeps caching my intents Extras, how to declare a pending intent that keeps fresh extras?

Voy a marca de tiempo la intención de ser desencadenada por el widget, y verifique que la marca de tiempo sea reciente en Main.java. Si es así, procederé con el procesamiento. Si no, mostraré la actividad Main.java.

Estoy ansioso por saber si hay alguna solución oficial para esto.

Respuesta

0

Debe borrar los extras de su intención después de usarlos.

Bundle extras = getIntent().getExtras(); 
if (extras == null) { 
    return; 
} 
String value1 = extras.getString("Value1"); 
String value2 = extras.getString("Value2"); 
extras.clear(); 
+2

Gracias por la sugerencia. Acabo de probar esto en Main.java (que es iniciado por el widget) y esto no parece hacer ninguna diferencia. ¿No sería esto simplemente borrar los "extras" de la variable local? Creo que el problema radica en cómo Android está comenzando la actividad de "aplicación reciente" con el último conjunto de extras que se le pasó. – r3mo

9

Creo que se puede distinguir una puesta en marcha "normal" de una puesta en marcha "aplicaciones reciente" marcando las banderas Intención; hay una bandera llamada

Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY

que, según la documentación:

This flag is not normally set by application code, but set for you by the system if this activity is being launched from history (longpress home key).

Por eso, cuando se establece este indicador, se puede optar por ignorar los extras.

38

Como dice Martijn, se puede comprobar si la aplicación se abre con una Intención con el indicador FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY, así:

int flags = getActivity().getIntent().getFlags();  
if ((flags & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) { 
    // The activity was launched from history 
} 
+3

Desafortunadamente esta bandera no se establece de manera confiable cuando debería ser. –

Cuestiones relacionadas