Android: запуск приложения из «последних приложений» запускает его с последним набором дополнений, используемых в намерении - PullRequest
13 голосов
/ 01 февраля 2011

Немного запутанной проблемы для меня здесь:

У меня есть виджет домашнего экрана, который при нажатии запускает мое основное приложение Activity с несколькими дополнениями, добавленными в намерение:

Intent start = new Intent(context, Main.class);
start.putExtra("action", "showXYZ");
start.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(start);

Это все работает нормально, запускает мою деятельность, и моя активность получает дополнительные данные, как и ожидалось.Он обрабатывает эти дополнения и запускает другое действие.

После того, как пользователь щелкнул виджет главного экрана и запустил Основное действие таким образом, войдя в приложение с помощью метода «Недавние приложения» (удерживая клавишу «home»).'key) запускает основное действие с дополнительными функциями - вызывая обработку, которую я не хочу (и приводя к открытию второго действия, а не к отображению основного действия).

IsЕсть ли обходной путь для этого?При запуске приложения методом «недавних приложений» я хочу просто запустить основное действие без последнего набора дополнений.

Большое спасибо за помощь!r3mo

Примечание: я нахожусь на Android 1.5

РЕДАКТИРОВАТЬ:

Обнаружил обходной путь здесь: Android продолжает кэшировать мои намерения Дополнительно, как объявить отложенное намерениеэто сохраняет свежие дополнения?

Я собираюсь поставить метку времени, предназначенную для виджета, и проверить, что метка времени недавно появилась в Main.java.Если это так, я продолжу обработку.Если нет, то я просто покажу активность Main.java.

Интересно узнать, есть ли официальные решения для этого.

Ответы [ 3 ]

40 голосов
/ 04 апреля 2012

Как говорит Мартин, вы можете проверить, открыто ли ваше приложение, с помощью Intent с установленным флагом FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY, например:

int flags = getActivity().getIntent().getFlags();       
if ((flags & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) {
    // The activity was launched from history
}
10 голосов
/ 11 апреля 2011

Я думаю, что вы можете отличить "нормальный" запуск от запуска "недавних приложений", проверив флажки Intent;есть флаг с именем

Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY

, который согласно документации:

This flag is not normally set by application code, but set for you by the system if this activity is being launched from history (longpress home key).

Итак, когда этот флаг установлен, выможет игнорировать статисты.

0 голосов
/ 01 февраля 2011

Вы должны удалить дополнения из своего намерения после их использования.

Bundle extras = getIntent().getExtras();
if (extras == null) {
    return;
}
String value1 = extras.getString("Value1");
String value2 = extras.getString("Value2");
extras.clear();
...