Programmgesteuert zum Startbildschirm wechseln

75

Ich möchte programmgesteuert in Android zum Startbildschirm wechseln, wenn der Benutzer auf die Schaltfläche klickt. Wie kann das gemacht werden?

Sri Sri
quelle
13
Bitte akzeptieren Sie einige Ihrer älteren Fragen.
Nothrow
Eine einfache Möglichkeit besteht darin, onBackPressed oder über keyEvent = Backpressed zu überschreiben und onHomePressed darauf aufzurufen. dann wird es sich wie homePressed
AndroidGeek

Antworten:

172

Sie können dies durch eine Absicht tun .

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

Diese Absicht startet die vom Benutzer definierte Launcher-Anwendung. Seien Sie vorsichtig damit, da dies so aussieht, als wäre Ihre Anwendung abgestürzt, wenn der Benutzer dies nicht erwartet.

Wenn Sie möchten, dass dies eine Exit-Schaltfläche aus Ihrer App erstellt, lesen Sie bitte diesen Artikel über die Exit-Schaltflächen in Android

Janusz
quelle
3
Ich habe gelesen, dass dies in einer App sehr falsch ist. Aber warum sagen die Leute das? Ich weiß, wo ich es benutze. Und es sieht so aus, als ob ich nur das tun kann, was ich tun möchte. Ist es also in Ordnung, es zu benutzen?
Sudarshan Bhat
6
Das Einfachste, was für mich funktioniert: startActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME));(FLAG_ACTIVITY_NEW_TASK scheint nicht notwendig zu sein.)
Jonik
Dies ist ein älterer Thread, aber obwohl dies funktioniert, funktioniert die Rückkehr zur vorherigen Aktivität nicht. Welche Eigenschaften dazu?
Portfoliobuilder
2
@portfoliobuilder, Sie müssen nur FLAG_ACTIVITY_NEW_TASK entfernen.
user802421
Was bedeutet ACTION_MAINund worauf bezieht CATAGORY_HOMEsich?
Srujan Barai
30

Einzeilige Lösung

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

Es verhält sich so, als ob die Home-Taste gedrückt wird

AndroidGeek
quelle
Es funktioniert. Ist es ein guter Ansatz. Wird es in jedem Fall funktionieren?
Prabs
In meiner Situation funktioniert es gut. Ich bin mir nicht sicher, ob es in allen Fällen funktioniert oder nicht
AndroidGeek
1
Funktioniert gut für mich (Android 6.x)
dangling_refrenz
1
Funktioniert auch gut für mich (Android 7.x)
Sinan Ceylan
Dies schließt meine Anwendung (Android 9.x)
Eildosa
11

Janusz 'Antwort ist großartig.

Das einzige, was ich hinzufügen möchte, was für einen Kommentar etwas zu lang ist, ist, dass Sie zum Startbildschirm wechseln können, ohne einen Verweis auf die aktuelle Aktivität zu haben.

Janusz 'Code muss aus einer Aktivität oder einem Fragment aufgerufen werden, weil startActivity(),

Um dies zu umgehen, können Sie einen statischen Verweis auf den Kontext Ihrer Apps in Ihrer Anwendungsdatei speichern:

public class YourApplication extends Application
{

    private static Context mAppContext;

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

    public static Context getContext()
    {
        return mAppContext;
    }

}

Jetzt können Sie den Benutzer von jeder Klasse in Ihrer App zum Startbildschirm des Geräts senden, nicht nur von Aktivitäten, Fragmenten oder anderen Klassen mit Bezug auf die aktuelle Aktivität (Sie können entscheiden, ob dies eine gute oder eine schlechte Sache ist):

Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
YourApplication.getContext().startActivity(startMain);
Peter Ajtai
quelle
0

Vom Android-Entwickler - Website

Hier sind einige Beispiele für andere Operationen, die Sie mit diesen zusätzlichen Parametern als Absichten angeben können:

* ACTION_MAIN with category CATEGORY_HOME -- Launch the home screen.
st0le
quelle
3
Es ist nichts Falsches daran, Fragen zu stellen, die mit einer schnellen Google-Abfrage und einem Blick in die Dokumentation beantwortet werden können. Wenn die Frage die richtigen Schlüsselwörter enthält, wird sie sehr schnell auf der ersten Google-Seite angezeigt und macht das Auffinden der richtigen Informationen und des Beispielcodes viel schneller als das Durchsuchen der Dokumentation. Ich bin ein irgendwie ausgebildeter Android-Programmierer, aber ich müsste googeln und ein oder zwei Seiten überspringen, um diese Frage zu beantworten. Es wäre großartig, wenn die Antwort auf diese Frage hier wäre, wo sie bearbeitet, verbessert, aktualisiert und bewertet werden kann.
Janusz
0

Ich weiß, dass dies etwas spät ist, aber ich bin auch auf das gleiche Problem gestoßen, und hier ist, wie ich es gelöst habe. Wenn Sie zu Ihrem zurückkehren MainActivity, müssen Sie Flags vom Ausgang hinzufügenActivity

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

Wenn Sie nun MainActivitydie aktive Zurück-Taste gedrückt haben , wird der Startbildschirm aufgerufen.

Jim
quelle
0
startActivity((new Intent(Intent.ACTION_MAIN)).addCategory(Intent.CATEGORY_HOME).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
Tom Taylor
quelle