¿Cómo evitar volver a la actividad anterior?

Cuando se presiona el botón ATRÁS en el teléfono, quiero evitar que una actividad específica regrese a la anterior.

Específicamente, tengo pantallas de inicio de sesión y registro, ambas inician una nueva actividad llamada HomeScreen cuando se produce un inicio de sesión / registro exitoso. Una vez que se inicia HomeScreen, quiero evitar que los usuarios puedan volver al inicio de sesión o pantallas de inicio de sesión presionando la tecla ATRÁS.

Intenté usar Intent.FLAG_ACTIVITY_NO_HISTORY , pero dado que la aplicación tiene integración con Facebook, cuando se usa el ‘Inicio de sesión con Facebook’, Facebook debería regresar a la pantalla de inicio de sesión inicial, por lo tanto, debo mantener un historial de estas actividades.

Pensé en anular el comportamiento del botón ATRÁS en HomeScreen para terminar una aplicación directamente cuando se presiona el botón y utilicé

 @Override public void onBackPressed() { finish(); } 

pero eso tampoco funciona.

Mi sugerencia sería finalizar la actividad a la que no desea que los usuarios vuelvan. Por ejemplo, en su actividad de inicio de sesión, inmediatamente después de llamar a startActivity , llame a finish() . Cuando los usuarios presionen el botón Atrás, no podrán ir a la actividad de inicio de sesión porque se eliminó de la stack.

La siguiente solución puede ser muy útil en el escenario habitual de inicio de sesión / actividad principal o implementando una pantalla de locking.

Para minimizar la aplicación en lugar de volver a la actividad anterior, puede anular onBackPressed() esta manera:

 @Override public void onBackPressed() { moveTaskToBack(true); } 

moveTaskToBack(boolean nonRoot) deja tu stack posterior tal como está, simplemente coloca tu tarea (todas las actividades) en segundo plano. Lo mismo que si el usuario presionó el botón de inicio .

Parámetro boolean nonRoot : si es falso, esto solo funciona si la actividad es la raíz de una tarea; si es verdadero, funcionará para cualquier actividad en una tarea.

No estoy seguro exactamente de lo que quiere, pero parece que debería ser posible, y también parece que ya está en el camino correcto.

Aquí hay algunos enlaces que pueden ayudar:

Deshabilitar el botón Atrás en Android

  MyActivity.java => @Override public void onBackPressed() { return; } 

¿Cómo puedo desactivar ‘volver atrás’ a alguna actividad?

  AndroidManifest.xml =>  

Hay dos soluciones para su caso, como si la actividad A iniciara en la actividad B, pero no desea volver a la actividad A en la actividad B.

1. Se eliminó la actividad anterior A de la stack posterior.

  Intent intent = new Intent(activityA.this, activityB.class); startActivity(intent); finish(); // Destroy activity A and not exist in Back stack 

2. Desactivado la acción del botón volver atrás.

Hay dos formas de evitar el evento de vuelta como se muestra a continuación,

1) Recomendar enfoque

 @Override public void onBackPressed() { } 

2) Reemplazar el método deKeyDown

 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_BACK) { return false; } return super.onKeyDown(keyCode, event); } 

Espero que sea útil, pero aún depende de tus situaciones.

finish() le da un método para cerrar la actividad actual, no toda la aplicación. Y es mejor que no intentes buscar métodos para eliminar la aplicación. Pequeño consejo.

¿Has probado la conjunción de Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_HISTORY Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_HISTORY ? ¡Recuerda usar estas banderas en la actividad inicial de Intent !

La respuesta de paulsm4 es la correcta. Si en onBackPressed() acaba de regresar, deshabilitará el botón Atrás. Sin embargo, creo que un mejor enfoque dado su caso de uso es voltear la lógica de la actividad, es decir, hacer de su actividad hogareña la principal, verificar si el usuario ha iniciado sesión allí, si no, iniciar la actividad de inicio de sesión. La razón es que si anulas el botón Atrás en tu actividad principal, la mayoría de los usuarios se confundirán cuando presionen hacia atrás y tu aplicación no hará nada.

Poner finish() justo después

 Intent i = new Intent(Summary1.this,MainActivity.class); startActivity(i); finish(); 

Este método funciona bien

 Intent intent = new Intent(Profile.this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 

Simplemente anule el método onKeyDown y verifique si se presionó el botón Atrás.

 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { //Back buttons was pressed, do whatever logic you want } return false; } 

Si no quiere volver a todas las actividades en su aplicación, puede usar

 android:launchMode="singleTask" 

Obtenga más información aquí: http://developer.android.com/guide/topics/manifest/activity-element.html

Poner

 finish(); 

Inmediatamente después de ActivityStart para detener la actividad impidiendo cualquier forma de volver a ella. Luego añade

 onCreate(){ getActionBar().setDisplayHomeAsUpEnabled(false); ... } 

A la actividad que estás comenzando