He leído varias publicaciones sobre el uso de esto, pero debe faltar algo ya que no me funciona. Mi actividad A tiene launchmode = "singleTop" en el manifiesto. Inicia la actividad B, con launchmode = "singleInstance". La actividad B abre un navegador y recibe una intención de regreso, por lo que es singleInstance. Estoy tratando de anular el botón Atrás para que el usuario vuelva a la actividad A y luego pueda presionar Atrás para dejar la actividad, en lugar de volver a la actividad B nuevamente.
// activity B
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ECLAIR
&& keyCode == KeyEvent.KEYCODE_BACK
&& event.getRepeatCount() == 0) onBackPressed();
return super.onKeyDown(keyCode, event);
}
@Override
public void onBackPressed() {
startActivity(new Intent(this, UI.class)
.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK));
return;
}
Después de regresar del navegador, la pila es ... A, B, Browser, B
Espero que este código cambie la pila a ... A ... para que al presionar atrás una vez más, el usuario regrese a la pantalla de inicio.
En cambio, parece cambiar la pila a ... A, B, Navegador, B, A ... como si esas banderas no estuvieran allí.
Intenté llamar a finish () en la actividad B después de startActivity, ¡pero luego el botón de retroceso me lleva de nuevo al navegador!
¿Qué me estoy perdiendo? ¡Gracias!
Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP
haré precisamente eso.