Как сделать так, чтобы ярлык «Домой» в Android обходил историю приложения, на которое он указывает?
-
13-09-2019 - |
Вопрос
У меня есть приложение, которое позволяет создавать «ярлыки» на Домашней странице для определенного Activity
.Оказывается, некоторые из моих пользователей будут использовать приложение, нажимать клавишу «Домой», чтобы заняться чем-то другим, а затем использовать один из ярлыков, чтобы вернуться к этому действию.Поскольку приложение все еще находится в памяти, оно просто открывает новый Activity
поверх остальных, и клавиша «Назад» вернет их назад через всю историю.Я бы хотел, чтобы они использовали ярлык, чтобы эффективно уничтожить историю, и чтобы клавиша «Назад» просто выходила из приложения.Какие-либо предложения?
Решение
Сначала настройте TaskAffinity в Манифесте, чтобы сделать Activity
запустить как другую «задачу»:
<activity
android:taskAffinity=""
android:name=".IncomingShortcutActivity">
<intent-filter>
<action android:name="com.example.App.Shortcut"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
затем при создании ярлыка установите FLAG_ACTIVITY_NEW_TASK
и FLAG_ACTIVITY_CLEAR_TOP
флаги.Что-то вроде:
// build the shortcut's intents
final Intent shortcutIntent = new Intent();
shortcutIntent.setComponent(new ComponentName(this.getPackageName(), ".IncomingShortcutActivity"));
shortcutIntent.putExtra(EXTRA_STOPID, Integer.toString(this.stop_id));
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
final Intent intent = new Intent();
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
// Sets the custom shortcut's title
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, custom_title);
// Set the custom shortcut icon
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(this, R.drawable.bus_stop_icon));
// add the shortcut
intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
sendBroadcast(intent);
Другие советы
Попробуйте добавить Intent.FLAG_NEW_TASK
к Намерению.