2010-09-16 9 views
67

Chcę przejść do ekranu głównego programowo w systemie Android, gdy użytkownik kliknie przycisk. Jak to zrobić?Programowo programuje się na ekranie głównym.

+11

zaakceptuj niektóre ze starszych pytań. – nothrow

+0

Prostym sposobem jest zastąpienie onBackPressed lub poprzez keyEvent = Backpressed i wywołanie on onHomePressed na nim. to będzie zachowywać się jak homePress – Nepster

Odpowiedz

138

Można to zrobić za pośrednictwem Intent.

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

Ta intencja uruchomi aplikację uruchamiania, którą zdefiniował użytkownik. Zachowaj ostrożność, ponieważ wygląda na to, że aplikacja uległa awarii, jeśli użytkownik tego nie oczekuje.

Jeśli chcesz zbudować ten przycisk wyjścia z aplikacji należy przeczytać ten artykuł na exit Buttons w Androidzie

+2

Czytałem, że jest to bardzo niewłaściwe w aplikacji. Ale dlaczego ludzie to mówią? Wiem, gdzie go używam. I wygląda na to, że to jedyna rzecz, którą mogę zrobić, aby zrobić to, co chcę robić. Więc czy można z niego korzystać? – Enigma

+4

Najprostsza rzecz, która działa dla mnie: 'startActivity (new Intent (Intent.ACTION_MAIN) .addCategory (Intent.CATEGORY_HOME));' (FLAG_ACTIVITY_NEW_TASK nie wydaje się być konieczna.) – Jonik

+0

To jest starsza nitka, ale chociaż to powraca do poprzedniego działania nie działa. Jakie atrybuty do tego? – portfoliobuilder

0

Od Android developer strona

Oto kilka przykładów innych operacji można określić jako zamiarów wykorzystujących te dodatkowe parametry:

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

STOŁECZKA Nie ma nic złego w zadawaniu pytań, na które można odpowiedzieć szybkim zapytaniem google i zajrzeć do dokumentacji. Jeśli pytanie zawiera poprawne słowa kluczowe, pojawi się ono na pierwszej stronie google bardzo szybko i sprawi, że znalezienie prawidłowych informacji i przykładowego kodu będzie o wiele szybsze niż zajrzenie do dokumentacji. Jestem w pewnym stopniu wyszkolonym programistą dla Androida, ale musiałbym google i pominąć jedną lub dwie strony, aby odpowiedzieć na to pytanie. Byłoby świetnie, gdyby odpowiedź na to pytanie była tutaj, gdzie można ją edytować, ulepszać, aktualizować i oceniać. – Janusz

+0

@Janusz, nie chciałem brzmieć ostro ... – st0le

9

Janusz's answer jest wielki.

Jedyne, co chcę dodać, co jest nieco zbyt długie na komentarz, to to, że możesz przejść do ekranu głównego bez odniesienia do bieżącego działania.

kod Janusza musi być wywołana z działalności lub fragment powodu startActivity(),

Aby obejść ten problem, można zapisać statyczny odniesienie do aplikacji kontekstu w pliku aplikacji:

public class YourApplication extends Application 
{ 

    private static Context mAppContext; 

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

    public static Context getContext() 
    { 
     return mAppContext; 
    } 

} 

Teraz możesz wysłać użytkownika na ekran główny urządzenia z dowolnej klasy w aplikacji, a nie tylko zajęcia, fragmenty lub inne klasy w odniesieniu do bieżącego działania (możesz zdecydować, czy jest to dobre, czy złe):

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

Jedno rozwiązanie linia

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

będzie zachowywać się jak Home przycisk jest wciśnięty

+0

Działa. Czy to dobre podejście ... Czy to działa w każdym przypadku? – Prabs

+0

W mojej sytuacji działa dobrze. Nie jestem cichy, czy działa we wszystkich przypadkach czy nie. – Nepster

+0

Działa dobrze dla mnie (Android 6.x) –

0

Wiem, że to trochę późno, ale ja też wpadłem na ten sam problem i tutaj jest jak postanowiłem go . Wracając do Twojego MainActivity trzeba dodać flagi z opuszczającego Activity

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

Teraz po naciśnięciu przycisku Wstecz będąc MainActivity aktywny jeden, przejdzie do ekranu głównego.