Android запускает существующий экземпляр приложения из виджета

У меня есть приложение, которое содержит несколько действий... так скажем, пользователь перемещается по стеку действий A->B->C. Затем нажимает кнопку HOME. Теперь, когда пользователь нажимает на виджет, я просто хочу вывести существующий / текущий экземпляр моего приложения на передний план. Я не хочу новый экземпляр приложения. Я хочу, чтобы деятельность С вернулась на передний план.

Я пытался запустить режим, чтобы "singleTask" | "singleInstance" но это НЕ решает моего желаемого требования, так как очищает текущий экземпляр и создает новый с действием A.

Есть идеи как решить это?

Большое спасибо!

3 ответа

Решение

Мне удалось найти решение. Я установил специализированный режим запуска....

android:launchMode="singleInstance"

Каждый раз, когда пользователь снова нажимает на виджет или значок приложения, запускается действие A по умолчанию. Чтобы открыть приложение там, где оно было в последний раз, внутри onCreate() метод в вашем MainActivity класс просто проверь isTaskRoot(), Если ложь, позвоните 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 вспомнить действие С, но оно вам нужно, если вы хотите взять с собой А или Б.

Я пишу только потому, что среди более 10 похожих постов никто не указал правильный способ сделать это.

http://developer.android.com/reference/android/content/Intent.html - последний абзац.

Попробуйте добавить это в свои намерения

intent.setFlags( Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT); 
Другие вопросы по тегам