Anulando el botón Inicio, ¿cómo me deshago de la elección?

Al crear una intención para que MyActivity reaccione ante un usuario presionando el botón de inicio es fácil usando el marcado XML:

      

Quiero saber cómo evitar la opción de “¿qué actividad desea usar” para la pantalla de inicio? HTC ha hecho que su “Touch Flo” (Sense) anule la actividad predeterminada de “inicio” y nunca recibo la pregunta si quiero usar “Start” o “TouchFlo” por lo general. Sin embargo, cuando agregué mi propia Actividad siempre recibo la pregunta.

Sí, sé que puedo marcar la casilla “Utilizar esto como estándar”, pero eso no es lo que quiero en este momento. Entonces, la pregunta es: ¿puedo hacer que el sistema anule todo lo demás y siempre use MyActivity como predeterminado?

Luego, realmente solo quiero anular la pantalla de inicio normal cuando mi aplicación se está ejecutando. Si no se está ejecutando, todo debería funcionar normalmente, es decir, MyActivity NO debería estar asociado con el botón de Inicio.

Cualquier idea sería genial.

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

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

Alternativamente, su aplicación podría contener una pantalla de inicio replicada que recolectó 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 puede reemplazar silenciosamente la pantalla de inicio predeterminada, sería difícil para el usuario decir que esto sucedió.

Además, ¿realmente desea anular el hogar? El hogar es como un botón de escape de emergencia. Si presiona Inicio dos veces, el usuario siempre regresará al panel central de la pantalla de inicio, por lo que cualquiera que sea la aplicación que esté ejecutando, es fácil para un usuario regresar a un lugar que conoce. En realidad, no deberías anular esto a menos que estés produciendo un reemplazo completo para el 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 (solo esta actividad). Luego, simplemente lo reimplementa, ya que era un evento de botón normal (el botón Atrás, 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 normal como su hogar con el uso predeterminado para evitar que vuelva la solicitud. Sin embargo, creo que es posible que modifique la configuración del sistema de alguna manera para que su actividad particular se considere la casa predeterminada, de modo que la presión de la página principal no haga nada o parezca bloqueada para el usuario en la actividad principal, y entiendo que desea iniciar a su usuario en otras actividades a partir de allí, dándoles una rápida vuelta de prensa a este Iniciador raíz. Puedo ver el beneficio de esto por completo, e incluso puede beneficiar lo que estoy desarrollando si elijo implementar múltiples pantallas de widgets que el usuario puede mover hacia la izquierda o hacia la derecha.

Hay al menos 1 aplicación que he descargado y que parece estar haciendo exactamente esto. Cuando el usuario sale de la aplicación, restaura la preferencia de inicio predeterminada habitual del usuario. La aplicación instruye a los usuarios muy explícitamente a elegir Launcher como su hogar predeterminado y nunca hacer eso con la aplicación en sí. Tiene algunos métodos diferentes de “salida” que le dan al usuario la opción de a qué hogar regresar si tienen múltiples, y uno que simplemente sale a su valor predeterminado normal.

Estoy investigando esto también y reportaré con progreso y fuente.

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

Ha estado allí desde API nivel 3.

 @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 ()

Use onUserLeaveHint ()

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

  1. Cuando el usuario golpea la tecla de inicio
  2. Cuando el usuario golpea la tecla hacia atrás
  3. Cuando el usuario golpea la barra del anunciador

Aquí puede ver el clic de botón de Homeb.

Buena suerte. 🙂