У меня есть приложение, которое содержит несколько действий... так что скажем, пользователь выполняет навигацию по стеку активности A-> B-> C. Затем нажмите кнопку HOME. Теперь, когда пользователь нажимает на Widget, я просто хочу, чтобы на моем переднем плане появилось приложение/текущий экземпляр приложения. Я НЕ хочу новый экземпляр приложения. Я хочу, чтобы активность C вернулась на передний план.
Я попробовал launchMode для "singleTask" | "singleInstance"
"singleTask" | "singleInstance"
но это НЕ решает мое желаемое требование, поскольку оно очищает текущий экземпляр и создает новый с активностью A.
Есть идеи, как это решить?
Большое спасибо!
Мне удалось найти решение. Я установил специализированный режим запуска...
android:launchMode="singleInstance"
Каждый раз, когда пользователь снова нажимает на виджет или значок приложения, запускается действие A по умолчанию. Чтобы открыть приложение, где оно было последним, внутри onCreate()
в вашем классе MainActivity
просто проверьте isTaskRoot()
. Если false, finish()
вызова finish()
и активность A (MainActivity) не будут отображаться, и приложение откроется там, где оно было в действии B.
Использование " singleInstance
" - не такая хорошая идея (по многим причинам). Вот лучший способ - от вашего обработчика намерений виджетов:
Intent yourActivity = new Intent(context, YourActivity.class);
yourActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(yourActivity);
Вам не нужно добавлять CLEAR_TOP
чтобы вызвать активность C, но вам это нужно, если вы хотите принести A или B.
Я только публикую, потому что между некоторыми 10+ аналогичными сообщениями никто фактически не указал правильный способ сделать это.
http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP - последний абзац.
Попробуйте добавить это к своим намерениям
intent.setFlags( Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);