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

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 ….

  • Problema emergente del menú Hardware con Appcompat
  • Cómo eliminar iconos de un menú de desbordamiento de ActionBarSherlock en Android 2.3?
  • ¿Cómo realizar este menú emergente personalizado con Material Design Android?
  • Cómo incluir un elemento de menú común en varios menús en el menú de Android xml?
  • Android: Crear un menú de acción rápida
  • El submenú de la barra de acción no funciona con actionLayout
  • Android - ActionBarSherlock - Establecer textcolor de texto en el menú
  • ¿Cómo puedo cambiar el fondo del menú Opciones para Android 2.3?
  • Apertura del submenú en la barra de acción en el botón del menú Hardware
  • Uso de onPrepareOptionsMenu en lugar de onCreateOptionsMenu en Fragment
  • Android: OptionMenu entre Actividad y Fragmentos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.