Frage

ich eine Anwendung mit mehreren Aktivitäten in Android und ich möchte, dass die Benutzer in der Lage sein, durch Drücken einer Menütaste, um abzumelden. Das Problem, das ich habe ist, dass

A) Android lässt Sie nicht die Anwendung beenden und
B), auch wenn ich den Benutzer auf LoginActivity wieder sie können immer drücken Sie zurück und erhalten direkt zurück zur vorherigen Tätigkeit, die sie in waren senden.

Ich habe bereits versucht, die Aktivität mit den beiden folgenden Flags zu starten:

Intent intent  = new Intent(this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);        
startActivity(intent);

ich auch mit jedem von ihnen selbst ausprobiert.

Ich habe auch versucht finish() nach startActivity(intent) Aufruf als ich in einem anderen lesen Stackoverflow Frage.

War es hilfreich?

Lösung

Ihre Login-Aktivität, überschreiben Sie die Zurück-Taste, so dass es Ihre App versteckt, anstatt die Aktivität von Bearbeitung:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

Auch sicher sein, zu Satz Android-Version:. AlwaysRetainTaskState = „true“ auf der Stammaktivität, so Android nicht gelöscht Ihren Stack (einschließlich der Login-Aktivität) nach 30min Inaktivität von Benutzern

Dann rufen Sie einfach finish (), wenn es eine erfolgreiche Anmeldung ist.

Andere Tipps

Diese bitweise ODER-verknüpft sein sollte oder Sie die frühere Flagge am Ende überschrieben wird.

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

Wie so:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);

Wie pro Wakka in eine Aktivität aus der Geschichte entfernen Stapel ...


Fügen Sie android:noHistory="true" Attribut zu Ihrem <activity> im AndroidManifest.xml wie folgt aus:

<activity android:name=".MyActivity"
    android:noHistory="true">
</activity>

Wenn Sie Android API 11 oder höher verwenden, können Sie den folgenden Code verwenden, um die Stapel zu löschen.

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);

Diese nicht Ihre Aktivität zurück Stapel löschen.

Auch nach all der oben Antwort folgen, wenn ich die Zurück-Taste gedrückt zeigte, dass es die letzte Aktivität für eine Sekunde, bevor die App geschlossen wird.

Das ist, was ich getan habe:

@Override
public void onBackPressed() { 
    Intent startMain = new Intent(Intent.ACTION_MAIN);
    startMain.addCategory(Intent.CATEGORY_HOME);
    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(startMain);
}

Jetzt meine app Ausfahrten auf der Rückseite drücken :) ohne jede Hektik.

Einstellung Intent.FLAG_ACTIVITY_CLEAR_TOP hat sich für mich in einem sehr ähnlichen Fall gearbeitet, wo ich nicht die Intent.FLAG_ACTIVITY_NEW_TASK-Flag gesetzt hat. Haben Sie versucht, ohne?

Diese Arbeit für mich:)

Intent main = new Intent(this, A_Activity.class);
main.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
    | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(main);

Intent tool = new Intent(this, B_Activity.class);
startActivity(tool);
finish();

Wenn A ist meine Stammaktivität zum Beispiel

Ich habe Tätigkeiten A -> B -> C -> D, wenn ich Aktivität rufen E auf Stapel beginnen Ich habe jetzt A -> E

Ich weiß nicht, ist es gut :) aber funktioniert.

Intent intent  = new Intent(this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);        
startActivity(intent);

schreibe dies und beachten: LoginActivity müssen sich zuerst als Launcher und

gestartet werden

Wenn Sie Launcher Modi die Fahnen sind schreiben überschrieben seinen Zweck, entfernen, so die launchermode und versuchen Sie es sicher bekommen

Versuchen Sie diese

Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(
    Intent.FLAG_ACTIVITY_CLEAR_TOP | 
    Intent.FLAG_ACTIVITY_CLEAR_TASK | 
    Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

Wenn wir diesen Code verwenden Login-Aktivität zu starten (A):

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);

Die Aktivität sollte in dem Stapel von Aktivitäten sein, andernfalls sind Flags keine Auswirkungen haben.

Wenn wir finish () in der Anmeldung Aktivität (A) verwenden, nach Tätigkeit Start (B) (zu vermeiden A von B zurück), die Aktivität A (Login) wird nicht in dem Stapel sein. Genau das gleiche passiert, wenn die Login-Aktivität „Nohistory“ als Attribut hat.

die Lösung für mich war also eine Mischung aus anderen Antworten:

Dieser Code geht in der Tätigkeit B, auf die Login-Aktivität zu vermeiden, kommen zurück:

@Override
public void onBackPressed() {
    moveTaskToBack(true);
    super.onBackPressed();
}

Und dieser Code geht in der Tätigkeit, die die Logout-Funktion aufrufen:

public static void logout() {
    Intent intent = new Intent(activity, LoginMain.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top