Android: намерение открыть неправильную активность - PullRequest
1 голос
/ 25 января 2012

Я работаю над виджетом для приложения для Android и столкнулся с проблемой.Когда пользователь нажимает на виджет, я бы хотел, чтобы приложение открыло его первое действие (которое с фильтром намерений: 'action.MAIN' / 'category.LAUNCHER') (я назову это Упражнение A).

Для этого я использую этот фрагмент (в моем классе WidgetProvider):

Intent intent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.view , pendingIntent); 

Это очень хорошо работает, если мое приложение убито или все действия были закрыты (с использованием обратнойкнопку, пока приложение не закроется)

Проблема возникает, когда открыто несколько действий.Представьте себе, что стек действий похож на: Деятельность A -> Деятельность B -> Деятельность C .Если я щелкну на виджете, SOMETIMES , приложение просто будет выведено на передний план, и вместо Activity A будет отображаться действие C .Это очень странно, потому что это происходит не каждый раз.(Похоже, это происходит после того, как я много перемещаюсь в действиях)

Мне действительно нужно, чтобы операция A открывалась, а не другая деятельность, какой бы ни был стэк действий, потому что эта деятельность похожа на концентратор с несколькими ссылками на различия.fonctionnalities.

Кто-нибудь может мне помочь?

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

PS: Извините, если мой английский довольно плохой, я из Бельгии

Ответы [ 2 ]

2 голосов
/ 10 января 2013

Из виджета вы должны делать более или менее то же, что и системный лаунчер с намерениями.

Попробуйте использовать FLAG_ACTIVITY_CLEAR_TOP в своем намерении. Вы также хотите посмотреть на FLAG_ACTIVITY_NEW_TASK.

Кстати, лучше следовать рекомендациям платформы , в которых говорится, что вы также можете вводить глубоко в свое приложение, если вы предоставите пользователю правильный путь для перехода вверх.

0 голосов
/ 25 января 2012

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

У вас возникают проблемы из-за действий в вашем бэк-стеке.Android управляет жизненным циклом ваших действий совершенно особым образом, который вы, вероятно, должны исследовать - http://developer.android.com/reference/android/app/Activity.html#ProcessLifecycle

с вызовом finish () - всегда вернется к деятельности, которая запустила текущую деятельность.Единственное время, когда ваше приложение закроется, если не было оригинальной активности.Вы всегда можете проверить это условие, и если вызывающее действие НЕДЕЙСТВИТЕЛЬНО, вы можете явно назвать вас Деятельностью А.

...