2010-09-16 18 views
67

Quiero ir a la pantalla de inicio de forma programada en Android cuando el usuario hace clic en el botón. ¿Cómo puede hacerse esto?Ir a la pantalla de inicio de forma programática

+11

Por favor, acepte algunas de sus preguntas anteriores. – nothrow

+0

Una forma simple es anular onBackPressed o mediante keyEvent = Backpressed y llamar aHomePressed en él. entonces se comportará como en casaPresionada – Nepster

Respuesta

138

Usted puede hacer esto a través de un Intent.

Intent startMain = new Intent(Intent.ACTION_MAIN); 
startMain.addCategory(Intent.CATEGORY_HOME); 
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(startMain); 

Este intento iniciará la aplicación de iniciador que el usuario haya definido. Tenga cuidado con esto porque parecerá que su aplicación se bloqueó si el usuario no espera esto.

Si desea que esta para construir un botón de salida de su aplicación por favor leer este artículo sobre exit Buttons en Android

+2

He leído que esto es muy incorrecto en una aplicación. Pero, ¿por qué la gente lo dice? Sé dónde lo estoy usando. Y parece que eso es lo único que puedo hacer para hacer lo que quiero hacer. Entonces, ¿está bien usarlo? – Enigma

+4

Lo más simple que funciona para mí: 'startActivity (new Intent (Intent.ACTION_MAIN) .addCategory (Intent.CATEGORY_HOME));' (FLAG_ACTIVITY_NEW_TASK no parece ser necesario.) – Jonik

+0

Este es un hilo más antiguo, aunque este las obras que regresan a la actividad anterior no funcionan. ¿Qué atributos tiene eso? – portfoliobuilder

0

De Android developer sitio

Éstos son algunos ejemplos de otras operaciones que se pueden especificar como las intenciones que utilizan estos parámetros adicionales:

* ACTION_MAIN with category CATEGORY_HOME -- Launch the home screen. 
+3

stOle No hay nada de malo en hacer preguntas que se pueden responder con una consulta rápida de Google y una mirada a la documentación. Si la pregunta contiene las palabras clave correctas, aparecerá en la primera página de Google muy rápidamente y hace que encontrar la información correcta y el código de muestra sea mucho más rápido que mirar la documentación. Soy un programador de Android entrenado, pero tendría que buscar en Google y omitir una o dos páginas para responder a esta pregunta. Sería genial si la respuesta a esta pregunta está aquí donde se puede editar, mejorar, actualizar y calificar. – Janusz

+0

@Janusz, no quise sonar duro ... – st0le

9

Janusz's answer es grande.

Lo único que quiero agregar, que es un poco demasiado largo para un comentario, es que puede ir a la pantalla de inicio sin tener una referencia a la actividad actual.

código de Janusz necesita ser llamado de una actividad o un fragmento debido a startActivity(),

Para evitar esto, se puede almacenar una referencia estática a su aplicaciones Contexto en su expediente de solicitud:

public class YourApplication extends Application 
{ 

    private static Context mAppContext; 

    public void onCreate() 
    { 
     super.onCreate(); 
     ... 
     YourApplication.mAppContext = getApplicationContext(); 
    } 

    public static Context getContext() 
    { 
     return mAppContext; 
    } 

} 

Ahora puede enviar al usuario a la pantalla de inicio del dispositivo desde cualquier clase de su aplicación, no solo Actividades, Fragmentos u otras Clases con referencia a la Actividad actual (puede decidir si esto es bueno o malo):

Intent startMain = new Intent(Intent.ACTION_MAIN); 
startMain.addCategory(Intent.CATEGORY_HOME); 
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
YourApplication.getContext().startActivity(startMain); 
10

Una solución de línea

moveTaskToBack(true); //activity.moveTaskToBack(true); 

se comportará como se pulsa el botón Inicio

+0

Está funcionando ... ¿Es un buen enfoque ... Funcionará en todos los casos? – Prabs

+0

En mi situación funciona bien. No estoy seguro de si funciona en todos los casos o no – Nepster

+0

Funciona bien para mí (Android 6.x) –

0

Sé que esto es un poco tarde, pero también me encontré con el mismo problema y aquí es cómo lo resolví . Volviendo a su MainActivity es necesario agregar banderas de la Activity salir

final Intent mainActivity = new Intent(this, MainActivity.class); 
    mainActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    mainActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 

Ahora, cuando se ha pulsado el botón de retroceso siendo MainActivity la activa, pasará a la pantalla principal.

Cuestiones relacionadas