Actualmente tengo una actividad que cuando se muestra una notificación también se mostrará en la barra de notificaciones.
Esto es para que cuando el Usuario presiona el botón de inicio y la Actividad es empujada a un segundo plano, puede volver a la Actividad a través de la Notificación.
El problema surge cuando un usuario presiona el botón de retroceso, mi actividad se destruye pero la notificación permanece, ya que quiero que el usuario pueda presionar hacia atrás pero aún pueda llegar a la actividad a través de la notificación. Pero cuando un USUARIO intenta esto, obtengo Punteros nulos porque intenta comenzar una nueva actividad en lugar de recuperar la anterior.
Así que esencialmente quiero que el botón Atrás actúe exactamente igual que el botón Inicio y así es como lo he intentado hasta ahora:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (Integer.parseInt(android.os.Build.VERSION.SDK) < 5
&& keyCode == KeyEvent.KEYCODE_BACK
&& event.getRepeatCount() == 0) {
Log.d("CDA", "onKeyDown Called");
onBackPressed();
}
return super.onKeyDown(keyCode, event);
}
public void onBackPressed() {
Log.d("CDA", "onBackPressed Called");
Intent setIntent = new Intent(Intent.ACTION_MAIN);
setIntent.addCategory(Intent.CATEGORY_HOME);
setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(setIntent);
return;
}
Sin embargo, el código anterior todavía parece permitir que se destruya mi Actividad. ¿Cómo puedo evitar que se destruya mi Actividad cuando se presiona el botón Atrás?
fuente
, the
<` debería convertirse en a>
.Respuestas:
Elimine su oyente clave o regrese
true
cuando lo haya hechoKEY_BACK
.Solo necesita lo siguiente para capturar la tecla de retroceso (Asegúrese de no llamar a super in
onBackPressed()
).Además, si planeas ejecutar un servicio en segundo plano, asegúrate de mirar
startForeground()
y asegurarte de tener una notificación continua o de lo contrario Android matará tu servicio si necesita liberar memoria.fuente
Fue más fácil implementarlo solo con una línea de código:
fuente
Creo que lo que quiere es no anular el botón de retroceso (eso no parece una buena idea, el sistema operativo Android define ese comportamiento, ¿por qué cambiarlo?), Sino usar el ciclo de vida de la actividad y mantener su configuración / datos en el evento onSaveInstanceState (Bundle) .
Luego usa onCreate (Bundle) para sacar todo de ese paquete persistente y recrear su estado.
Considere el código psuedo anterior para señalarlo en la dirección correcta. Leer el Ciclo de vida de la actividad debería ayudarlo a determinar la mejor manera de lograr lo que está buscando.
fuente
simplemente haz esto ...
comentando el //super.onBackPressed (); hará el truco
fuente
Prueba esto:
fuente
En caso de que desee manejar el comportamiento del botón de retroceso (en la parte inferior del teléfono) y el botón de inicio (el que está a la izquierda de la barra de acción), esta actividad personalizada que estoy usando en mi proyecto puede ayudarlo .
Ejemplo de uso en su actividad:
fuente
fuente
En Kotlin:
Para más información puedes consultar esto .
También hay una pregunta específica sobre cómo anular el botón de retroceso en Kotlin.
fuente