Android: намерение открыть неправильную активность

1

Я работаю над виджетами для Android-приложения, и у меня возникла проблема. Когда пользователь нажимает на виджет, я хотел бы, чтобы приложение открыло его первое действие (одно с заглавием-фильтром: "action.MAIN"/"category.LAUNCHER") (я назову его Activity 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); 

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

Проблема возникает, когда несколько действий открыты. Представьте, что стек активности похож: Activity A → Activity B → Activity C. Если я нажму на виджет, ИСПОЛЬЗУЕТ, что приложение просто выведено на передний план, а Activity C будет виден вместо Activity A. Это очень странно, потому что это не происходит каждый раз. (Кажется, что это происходит после того, как я многому занимаюсь в действиях)

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

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

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

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

  • 1
    Вы не могли бы просто вызвать финиш (), когда начинаете свою следующую деятельность? Это не должно появиться снова.
  • 0
    Это не мыслимо. Если я сделаю это, приложение остановится, как только пользователь нажмет кнопку «Назад».
Теги:
android-activity
android-intent

2 ответа

2

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

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

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

0

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню