Anulación del botón Inicio – ¿cómo puedo deshacerme de la elección?

Al crear un Intent para que MyActivity reaccione a un usuario pulsando el botón Home, es fácil usar el marcado XML:

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

¿Quieres saber cómo evitar la elección de "qué actividad quieres usar" para la pantalla de inicio? HTC ha hecho que su "Touch Flo" (Sense) reemplace la actividad predeterminada "start" y nunca obtengo la pregunta si quiero usar "Start" o "TouchFlo" normalmente. Sin embargo, cuando agregué mi propia actividad siempre obtengo la pregunta.

Sí, sé que puedo marcar la casilla "Usar esto como estándar", pero no es lo que quiero ahora mismo. Por lo tanto, la pregunta es: ¿puedo hacer que el sistema anule todo lo demás y siempre use MyActivity como predeterminado?

A continuación, realmente sólo quiero anular la pantalla de inicio normal cuando mi aplicación se está ejecutando. Si no está funcionando, todo debería funcionar como normal, es decir, MyActivity no debería estar asociado con el botón Inicio.

Cualquier idea sería genial.

No puede anular permanentemente el botón Inicio sin que el usuario lo confirme.

Un argumento de por qué este es el caso es de seguridad. El botón Inicio es la forma en que se puede garantizar al usuario que salga de cualquier aplicación. Si pudiera hacer que el botón Inicio lanzara su aplicación en lugar de la pantalla de inicio sin que el usuario confirmara este cambio, sería muy fácil escribir una aplicación maliciosa que secuestró el teléfono de un usuario.

Como alternativa, su aplicación podría contener una pantalla de inicio duplicada que recogiera los detalles de la cuenta de Google de un usuario; No es tan difícil ya que la fuente está disponible. Si su aplicación podría sustituir silenciosamente la pantalla de inicio predeterminada, sería difícil para el usuario decir que esto había sucedido.

Además, ¿realmente desea reemplazar Home? El hogar es como un botón de escape de emergencia. Presionar Inicio dos veces siempre llevará a un usuario de nuevo al panel central de la pantalla de inicio, por lo que independientemente de la aplicación que están ejecutando, es fácil para un usuario volver a algún lugar que conozcan. Usted no debe realmente estar anulando esto a menos que usted está produciendo un reemplazo completo del hogar.

 @Override public void onAttachedToWindow() { Log.i("TESTE", "onAttachedToWindow"); this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); super.onAttachedToWindow(); } 

Con este método, el botón HOME deja de funcionar en esta actividad (sólo esta actividad). A continuación, sólo reimplementar como era un evento de botón normal (el botón de nuevo, por ejemplo).

 public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_HOME) { Log.i("TESTE", "BOTAO HOME"); return true; } return super.onKeyDown(keyCode, event); } 

Bueno, el usuario todavía tendría que elegir la casa regular como su casa con el uso como predeterminado comprobado para detener el mensaje de volver. Sin embargo, creo que es posible que a continuación, modificar la configuración del sistema de alguna manera a incidentalmente su actividad particular se considerará la casa por defecto, de tal manera que la prensa de casa, entonces no hacer nada o aparecer bloqueado al usuario en la actividad principal, Y entiendo que usted desea lanzar a su usuario en otras actividades de allí, dándoles una vuelta rápida de la prensa casera a este lanzador de la raíz. Puedo ver el beneficio de esto completamente, y puede incluso beneficiar a lo que estoy desarrollando si elijo implementar múltiples pantallas de widget que el usuario puede voltear a la izquierda o derecha entre.

Hay al menos una aplicación por ahí que he descargado que parece estar haciendo exactamente esto. Cuando el usuario sale de la aplicación, restaura la preferencia de inicio predeterminada del usuario por defecto. La aplicación indica a los usuarios de forma muy explícita que elija Launcher como su casa predeterminada y nunca lo haga con la propia aplicación. Tiene unos pocos métodos diferentes de "salida" que le dan al usuario la elección de qué hogar volver si tienen múltiples, y uno que acaba de salir a su predeterminado regular.

Estoy investigando esto también y volveré a informar con el progreso y la fuente.

Utilizar onUserLeaveHint ()

OnUserLeaveHint () es un método protegido como otros métodos de ciclo de vida de la actividad y si está manejando onUserLeaveHint esto se encargará del siguiente caso

  1. Cuando el usuario toca la tecla de inicio
  2. Cuando el usuario pulsa la tecla de retroceso
  3. Cuando el usuario toca la barra del anunciador

Aquí usted puede coger el tecleo del botón de Homeb.

Buena suerte. 🙂

OnUserLeaveHint () puede capturar al usuario presionando el botón de inicio.

Ha estado allí desde el nivel 3 de la API.

 @Override protected void onUserLeaveHint() { super.onUserLeaveHint(); /* * Called as part of the activity lifecycle when an activity is about to go into the background * as the result of user choice. For example, when the user presses the Home key, onUserLeaveHint() will be called, * but when an incoming phone call causes the in-call Activity to be automatically brought to the foreground, * onUserLeaveHint() will not be called on the activity being interrupted. * In cases when it is invoked, this method is called right before the activity's onPause() callback. */ } 

Fuente: https://developer.android.com/reference/android/app/Activity.html#onUserLeaveHint ()

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.