2010-01-17 15 views
20

Al crear una Intención de manera que MyActivity reacciona a un usuario que presiona el botón de inicio es muy fácil usando el marcado XML:Anulando el botón Inicio, ¿cómo me deshago de la opción?

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

Quiero saber cómo evitar ser la elección de "qué actividad quieres 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 de verificación "Usar 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?

A continuación, realmente solo quiero anular la pantalla de inicio normal cuando se está ejecutando mi aplicación. 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.

+3

La única razón por la que no recibe el cuadro de diálogo selector de actividad cuando se pulsa el hogar en un dispositivo HTC es porque están lo preinstalé con esa decisión tomada. Puede ver que HTC está sujeto al mismo selector de actividad yendo a Aplicaciones> TouchFLO> Borrar valores predeterminados, luego presione Inicio. Se le pedirá que use la pantalla de inicio de HTC o la de Android. –

+0

Bien, entonces nos quedamos atrapados con SIEMPRE anula la pantalla de inicio predeterminada o no anulamos el botón en absoluto ... = ( – Ted

Respuesta

28

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.

De forma alternativa, su aplicación podría contener una pantalla de inicio replicada que recolectó los detalles de una cuenta de usuario de Google; 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 Inicio? 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.

+1

Thx por la respuesta. Mi aplicación no es una aplicación normal para todos. Es una muy aplicación específica utilizada en un entorno empresarial y por lo tanto tiene requisitos muy específicos. En esta aplicación utilizamos otras aplicaciones externas que queremos "integrar", lo que lo complica aún más. Necesitamos poder acceder a esta aplicación externa (software de navegación) y luego volvamos a nuestro programa "a la perfección". Dado que la aplicación de navegación es a pantalla completa, tenemos que anular un botón de Hardware para poder regresar a nuestra aplicación principal, por lo tanto, la pregunta. El botón BACK no funciona, ya está anulado en el navegador aplicación parece ... – Ted

+0

Realmente quería un "encabezado" en el software nac, pero eso no funcionó, así que necesito un botón. El botón HOME era la elección natural ya que eso llevaría al usuario a la "actividad principal" "de la aplicación ... – Ted

+2

No sé para quién trabaja, pero en base a todas sus preguntas aquí en StackOverflow, trabajé anteriormente en un producto ridículamente similar que incluye todos los requisitos de bloqueo y otras cosas. Si desea implementar este tipo de solución totalmente integrada en Android, deberá modificar la plataforma Android y proporcionar una imagen personalizada que necesitaría mostrar en cada dispositivo. –

1

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 fuente &.

5
@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);  
} 
+24

No funciona con ICS (¿dónde funciona?) - E/AndroidRuntime (5594): java.lang.IllegalArgumentException: el tipo de ventana no se puede cambiar después de agregar la ventana. –

0

Uso 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 hará cargo de los siguientes casos

  1. Cuando usuario pulsa la tecla HOME
  2. Cuando el usuario devuelve el golpe clave
  3. Cuando el usuario golpea la barra anunciador

Aquí puede ver clic con el botón Inicio.

Goodluck. :)

+0

¿dónde está el ejemplo? –

0

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

Ha estado allí desde el nivel de la API 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()

Cuestiones relacionadas