Marc's Antwort funktioniert großartig, außer in meinem Fall, in dem meine Hauptaktivität einen launchMode von singleTop hat. Sobald ich diese Absicht ausgeführt habe und dann zu neuen Aktivitäten navigiere und die Home-Taste auf dem Gerät drücke. Dann starte ich meine App erneut über das App-Symbol. Am Ende erstelle ich eine neue Instanz der Hauptaktivität mit meiner vorherigen Aktivität auf dem Backstack .
Nach dieser Frage liegt es daran, dass die Absichten nicht übereinstimmen. Anschauenadb dumpsys activity ich mir das ansehe, sehe ich, dass das Paket in meinem Standard-Android-Launcher null ist, während das Intent-Paket der Name meines Pakets ist, wenn ich das mache, was Marc vorschlägt. Dieser Unterschied führt dazu, dass sie nicht übereinstimmen und eine neue Instanz starten, wenn das App-Symbol erneut getippt wird und die Hauptaktivität nicht oben angezeigt wird.
Bei anderen Startern wie dem Kindle ist das Paket jedoch auf die Absicht des Starters eingestellt, sodass ich eine generische Methode für den Umgang mit Startern benötigte. Ich habe statische Methoden wie die folgenden hinzugefügt:
static boolean mIsLaunchIntentPackageNull = true;
public static boolean isLaunchIntent(Intent i) {
if (Intent.ACTION_MAIN.equals(i.getAction()) && i.getCategories() != null
&& i.getCategories().contains(Intent.CATEGORY_LAUNCHER)) {
return true;
}
return false;
}
public static void handleLaunchIntent(Intent i) {
if (isLaunchIntent(i)) {
if (i.getPackage() != null) {
mIsLaunchIntentPackageNull = false;
}
else {
mIsLaunchIntentPackageNull = true;
}
}
}
mit einem Go-Home-Mechanismus wie diesem:
Intent intentHome = appContext.getPackageManager()
.getLaunchIntentForPackage( appContext.getPackageName());
intentHome.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
if (mIsLaunchIntentPackageNull) {
intentHome.setPackage(null);
}
appContext.startActivity(intentHome);
Dann habe ich in der in meinem Manifest definierten Hauptaktivität folgende Zeile hinzugefügt:
public void onCreate(Bundle savedInstanceState) {
[class from above].handleLaunchIntent(getIntent());
Dies funktioniert für mich auf Kindle und meinem Telefon und ermöglicht es mir, die App ordnungsgemäß zurückzusetzen, ohne eine weitere Instanz der Hauptaktivität hinzuzufügen.