Відповідь Марка чудово працює, за винятком мого випадку, коли моєю основною діяльністю є launchMode singleTop. Після того, як я запустив цей намір, а потім перейшов до нових дій і натиснув кнопку додому на пристрої, а потім запустив програму знову за допомогою піктограми програми, я в кінцевому підсумку створив новий екземпляр основної діяльності, з моєю попередньою активністю на задньому стеку .
Відповідно до цього питання це тому, що наміри не збігаються. Дивлячись adb dumpsys activity, я бачу, що зі моєї стандартної програми запуску Android пакет є нульовим, тоді як коли я роблю так, як пропонує Марк, пакет намірів - це назва мого пакета. Ця різниця призводить до того, що вони не збігаються і запускають новий екземпляр, коли піктограма програми натискається знову, а основна діяльність не зверху.
Тим НЕ менше, на інших пускових установках , як на Kindle, пакет буде встановлений на пусковому намірі, так що мені потрібна загальний спосіб обробки пускових установок . Я додав статичні методи на зразок таких:
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;
}
}
}
з механізмом повернення додому таким чином:
Intent intentHome = appContext.getPackageManager()
.getLaunchIntentForPackage( appContext.getPackageName());
intentHome.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
if (mIsLaunchIntentPackageNull) {
intentHome.setPackage(null);
}
appContext.startActivity(intentHome);
тоді в основну діяльність, визначену в моєму маніфесті, я додав цей рядок:
public void onCreate(Bundle savedInstanceState) {
[class from above].handleLaunchIntent(getIntent());
це працює для мене на Kindle та на моєму телефоні, і дозволяє мені правильно скинути програму без додавання чергового екземпляра основної діяльності.