2010-08-12 17 views
6

Estoy trabajando en una aplicación que inicia la actividad del navegador para realizar una autorización de Twitter OAuth. Este proceso utiliza una url de devolución de llamada que relanzará la actividad que inició la actividad del navegador en primer lugar.Abrir la actividad del navegador, pero evitar que esté en el historial de actividad

Mi problema es que las páginas del navegador permanecen en el historial y cuando el usuario hace clic atrás en la actividad de preferencias que lanzó el navegador en primer lugar, no vuelven a la actividad principal de la aplicación, sino que se devuelven al navegador. Intenté agregar indicadores al intento de inicio para evitar el historial y restablecer en claro, pero parece que no funciona cuando se ejecuta en mi teléfono, solo en los emuladores.

Aquí está el código que estoy usando para poner en marcha la actividad del navegador:

   Intent webIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)); 

      webIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
      webIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 
      webIntent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); 

      ctx.startActivity(webIntent); 

Alguien tiene alguna idea de lo que podría estar mal?

Respuesta

0

llamada

finish(); 

después

ctx.startActivity(webIntent); 
+0

que cerrará la actividad que realmente quiero quedar abierta, aquí es una secuencia de eventos . La aplicación comienza con MainActivity, el usuario abre PreferencesActivity, luego el usuario hace clic en Authorize Twitter que inicia la actividad del navegador con el código anterior, pasándole una url de devolución de llamada que PreferencesActivity tiene un filtro de intención para manejar. El usuario inicia sesión en Twitter, autoriza su uso por la aplicación y el navegador ejecuta la url de devolución de llamada que reactiva la actividad de preferencias a través de su filtro de intención. En este momento, si el usuario hace clic en la tecla 'Atrás', quiero que vuelva a MainActivity. – jaredbro

+0

¿Por qué reactivan PreferencesActivity con IntentFilter en lugar de usar startActivityForResult? No estoy seguro si funcionaría en su caso ya que no conozco los detalles de su código, pero ¿podría ser eso una idea? De esta manera, en realidad, volverías al historial de la pila en lugar de abrir otra instancia de PreferencesActivity. Sin embargo, no estoy seguro si eso es lo que hace ahora, más fácil de ver con el código completo, devoluciones de llamada, filtros de intención, etc. –

0

Hola tengo el mismo problema en este momento. Creo que la solución es comenzar la actividad que desea volver a con una bandera especial:

Intent intent = new Intent(this, acticityToReturnTo.getClass()); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
startActivity(intent); 

El problema es que es que no funciona (en al menos 1,6) .. Pero tal vez alguien encuentra una solución para este . Creo que FLAG_ACTIVITY_CLEAR_TOP es exactamente lo que hacemos.

+1

¿Se da cuenta de que el segundo 'setFlags()' está anulando el primero?Desea utilizar 'addFlags()' para configurar aditivamente flags para la intención. – ohhorob

0

Encontré que Intent.FLAG_ACTIVITY_NO_HISTORY funciona solo si el navegador no se estaba ejecutando antes. Si reinicio Android y ejecuto mi aplicación que llama al navegador todo funciona bien. Pero cuando inicio el navegador antes de mi aplicación, el navegador permanecerá en la historia.

Aquí es cuestión relacionada también, pero sin solución realmente trabajar

How can I do that in Android. Activity -> WebBrowser -> Acrivity, but Press Back not see the WebBrowser

2

Active la marca a la actividad Intent.FLAG_ACTIVITY_CLEAR_TOP después de comenzar la misma. De esta manera, la tarea se borrará forma la pila de aplicación por lo que su actividad principal sigue siendo el de arriba en cada nuevo lanzamiento:

ctx.startActivity(webIntent); 
browserIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
Cuestiones relacionadas