La réponse de Marc fonctionne très bien, sauf que dans mon cas, d'où mon activité principale a un launchMode de singleTop. Une fois que je lance cette intention, puis accédez à de nouvelles Activités et appuyez sur le bouton home de l'appareil, puis de lancer mon application à nouveau à partir de l'icône de l'application, j'arrive à la fin de la création d'une nouvelle instance de l'Activité principale, avec mon activité précédente sur la pile de retour.
Conformément à cette question c'est parce que les intentions ne correspondent pas. En regardant adb dumpsys activity
, je vois que depuis mon android standard lanceur, le paquet est nulle, alors que quand je le fais, comme Marc l'indique, le but paquet est le nom de mon colis. Cette différence entraîne leur correspondent pas et pour démarrer une nouvelle instance lorsque l'icône de l'application est frappa de nouveau et la principale activité n'est pas sur le dessus.
Cependant, sur d'autres lanceurs, comme sur le Kindle, le paquet est mis sur le lanceur intention, j'ai donc besoin d'une méthode générique permettant de gérer des lanceurs. J'ai ajouté des méthodes statiques comme tel:
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;
}
}
}
avec un rentrer à la maison mécanisme comme ceci:
Intent intentHome = appContext.getPackageManager()
.getLaunchIntentForPackage( appContext.getPackageName());
intentHome.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// need to match launcher intent exactly to avoid duplicate activities in stack
if (mIsLaunchIntentPackageNull) {
intentHome.setPackage(null);
}
appContext.startActivity(intentHome);
puis l'activité principale définie dans mon manifeste, j'ai ajouté cette ligne:
public void onCreate(Bundle savedInstanceState) {
[class from above].handleLaunchIntent(getIntent());
cela fonctionne pour moi sur le kindle et mon téléphone, et me permet de réinitialiser correctement l'application w/o ajout d'une autre instance de l'activité principale.