Método de llamada cuando el botón de inicio presionado en android

Así que tengo este método en una de mis actividades de Android:

@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK) { Log.d("Test", "Back button pressed!"); } else if(keyCode == KeyEvent.KEYCODE_HOME) { Log.d("Test", "Home button pressed!"); } return super.onKeyDown(keyCode, event); } 

Pero, aunque el KEYCODE_HOME es válido, el método de registro nunca se activa. Esto funciona para el botón de nuevo sin embargo. ¿Alguien sabe por qué esto es y cómo conseguir que esto funcione?

Gracias

8 Solutions collect form web for “Método de llamada cuando el botón de inicio presionado en android”

El botón Inicio es un botón muy peligroso para anular y, debido a eso, Android no le permitirá anular su comportamiento de la misma manera que hace el botón ATRÁS.

Echa un vistazo a esta discusión.

Observará que el botón de inicio parece implementado como una invocación de intención, por lo que terminará teniendo que agregar una categoría de intención a su actividad. Entonces, cada vez que el usuario llegue a su casa, su aplicación aparecerá como una opción. Usted debe considerar qué es lo que usted está mirando para lograr con el botón casero. Si no es para reemplazar la pantalla de inicio por defecto del dispositivo, me cuidaría de sobrecargar el botón de inicio, pero es posible (por discusión en el hilo anterior.)

Me tomó casi un mes para pasar por esto. Justo ahora resolví este problema. En la onPause () de tu actividad, debes incluir lo siguiente si condition:

  if (this.isFinishing()){ //Insert your finishing code here } 

La función isFinishing () devuelve un booleano. Es cierto si su aplicación se está cerrando realmente, False si su aplicación todavía está en ejecución, pero por ejemplo la pantalla se apaga.

¡Espero eso ayude!

Encontré que cuando presiono el botón HOME el método onStop () se llama. Usted puede utilizar el siguiente pedazo de código para supervisarlo:

 @Override protected void onStop() { super.onStop(); Log.d(tag, "MYonStop is called"); // insert here your instructions } 

El botón HOME no puede ser interceptado por las aplicaciones. Este es un comportamiento por diseño en Android. La razón es para evitar que las aplicaciones maliciosas obtengan control sobre su teléfono (si el usuario no puede presionar o volver a casa, es posible que nunca pueda salir de la aplicación). El botón Inicio se considera la "zona segura" del usuario y siempre se iniciará la aplicación de inicio del usuario configurada.

La única excepción a lo anterior es cualquier aplicación configurada como reemplazo de casa. Lo que significa que tiene lo siguiente declarado en su AndroidManifest.xml para la actividad relevante:

 <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> 

Al presionar el botón de inicio, se onNewIntent la actividad de la aplicación de inicio actual onNewIntent .

Tengo una solución simple en el manejo de la prensa del botón casero. Aquí está mi código, puede ser útil:

 public class LifeCycleActivity extends Activity { boolean activitySwitchFlag = false; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK) { activitySwitchFlag = true; // activity switch stuff.. return true; } return false; } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public void onPause(){ super.onPause(); Log.v("TAG", "onPause" ); if(activitySwitchFlag) Log.v("TAG", "activity switch"); else Log.v("TAG", "home button"); activitySwitchFlag = false; } public void gotoNext(View view){ activitySwitchFlag = true; startActivity(new Intent(LifeCycleActivity.this, NextActivity.class)); } } 

Como resumen, ponga un booleano en la actividad, cuando se produce el cambio de actividad (evento startactivity), establezca la variable y en el evento onpause compruebe esta variable.

onPause() método onPause() para hacer lo que desea hacer en el botón de inicio.

KeyEvent.KEYCODE_HOME no puede ser interceptado.

Sería muy mal si fuera posible.

(Edit) : Acabo de ver Nicks respuesta, que es perfectamente completa;)

También tuve problemas con el botón HOME por un tiempo. Quería detener / omitir un servicio de fondo (que encuesta la ubicación) cuando el usuario hace clic en el botón HOME.

Aquí es lo que he implementado como "hack-like" solución;

Mantener el estado de la aplicación en SharedPreferences utilizando valor booleano

En cada actividad

OnResume () -> set appactive = true

OnPause () -> set appactive = false

Y el servicio de fondo comprueba el appstate en cada bucle, omite la acción

IF appactive = false

Funciona bien para mí, al menos no drenar la batería más, espero que esto ayude ….

  • Android: varios menús de opción en una actividad
  • Android: muestra el menú de varias actividades
  • Menú Android Título del elemento que no se muestra
  • Cambio de elementos de menú en barra de acción sherlock dinámicamente
  • Tratando de ocultar y mostrar elementos de menú en la barra de acción
  • El menú de opciones no se mostrará en Android 4.1.1
  • Diálogo de alerta desde dentro de onOptionsItemSelected android
  • Problema XML en el ejemplo del menú básico
  • Menú desplegable / emergente personalizado de Android
  • SearchView en AppCompat distorsiona el icono
  • Creación de un menú de opciones en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.