5

He estado luchando con este problema desde hace un tiempo. Tengo un widget que muestra un resumen de una receta de cocina. Se puede hacer clic en el widget para que cada vez que el usuario haga clic en él se abra la nueva actividad con una descripción completa de esa receta. El problema es que, a veces, cuando se hace clic en el widget, se abre una actividad incorrecta. Déjeme darle un ejemplo:Android: Actividad incorrecta de apertura del widget

  1. usuario hace clic en widget y actividad A se abre
  2. comienza la actividad del usuario B (por ejemplo, el índice de recetas) de la actividad A.
  3. usuario inicia la actividad C de la actividad B.
  4. El usuario presiona el botón de inicio.
  5. usuario hace clic en el widget de nuevo y se muestra la actividad de C en lugar de A

Intenté fijar una compibation de esos tres banderas que ayuda en la solución de sólo la mitad del problema:

openIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 

mediante el uso de banderas por encima de lo lograron mostrar una actividad correcta (a) hasta que lo haga lo siguiente:

  1. usuario abre actividad a desde el widget
  2. usuario se mueve a la actividad B y abre la actividad Un haciendo clic en nueva receta
  3. Nueva receta se muestra al usuario
  4. usuario hace clic en el botón Inicio y hace clic en el widget.
  5. Se muestra la actividad A (la correcta) pero con una receta diferente.
  6. A partir de ahora si me muevo a diferentes actividades B o C y hago clic en Inicio y luego en widget de nuevo, no se muestra la actividad A, pero sí la que estaba visible antes de presionar el botón Inicio.

Espero haberlo explicado con suficientes detalles. Estaría muy agradecido por tu ayuda, ¡porque esto me vuelve loco!

Actualizado:

Ésta es mi pendingIntent:

Intent openIntent = new Intent(context, ProfanityDefinition.class); 

openIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
openIntent.setData(Uri.parse(openIntent.toUri(Intent.URI_INTENT_SCHEME))); 

Bundle bundle = new Bundle(); 
bundle.putBoolean("widgetRequest", true); 
openIntent.putExtras(bundle); 
PendingIntent openPendingIntent = PendingIntent.getActivity(context, 0, openIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
views.setOnClickPendingIntent(R.id.widget_content, openPendingIntent); 

Gracias

Respuesta

12

Mostrar el código para crear la PedningIntent. Si le está pasando extras a su actividad, tenga en cuenta que dos intentos que difieren solo por los extras se tratan como equivalentes. Probablemente desee pasar el PendingIntent.FLAG_CANCEL_CURRENT cuando cree el PendingIntent para asegurarse de que su intento no se reutilice.

+0

Dado que ya se está ejecutando una tarea para su actividad, 'FLAG_ACTIVITY_NEW_TASK' simplemente pondrá la actividad en ejecución en primer plano. Establezca 'android: taskAffinity =" "' en AndroidManifest.xml para que la actividad 'ProfanityDefinition' haga que se ejecute en una tarea separada. Luego obtendrá una nueva instancia al hacer clic en el widget. –

+0

Eso no ayudó ... Todavía obtengo actividad B en lugar de A o A con contenido diferente ... es extraño – Marqs

+1

Funciona, revisa tu código. ¿Estás utilizando Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP' como las banderas? ¿Y cuál es el nombre de la clase de "actividad A"? –

Cuestiones relacionadas