2012-01-25 2 views
1

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

Чтобы сделать это, я использую этот фрагмент кода (в моем 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); 

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

Проблема возникает, когда несколько действий открыты. Представьте себе, что стек деятельности выглядит следующим образом: Деятельность A -> Деятельность B -> Деятельность C. Если я нажму на виджет, ИНОСТРАНЦЫ приложение просто выведено на передний план и активность C видна вместо Activity A. Это очень странно, потому что это не происходит каждый раз. (Кажется, что это происходит после того, как я много перемещаюсь по видам деятельности)

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

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

спасибо.

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

+1

Не могли бы вы просто называть финиш(), когда вы запускаете следующую операцию? Он не должен появляться снова. – nik431

+0

Это невозможно. Если я это сделаю, приложение остановится, как только пользователь нажмет кнопку «Назад». – Valentin

ответ

0

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

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

call finish() - всегда будет возвращаться к активности, которая запустила текущую деятельность. Единственный раз, когда ваше приложение закроется, - это если не было оригинального действия. Вы всегда можете проверить это условие, и если вызывающая активность равна NULL, вы можете явно назвать вас активностью.

+0

Я знаю, как Android управляет действиями. Проблема заключается в том, что когда я вызываю действие, которое я хочу открыть (даже в явном виде, в данном случае, активность А) из моего виджета, иногда приложение открывает Activity C (если стек Activity - A-B-C) – Valentin

2

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

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

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

Смежные вопросы