Android: запуск приложения из "последних приложений" запускает его с помощью последнего набора дополнительных функций, используемых в намерении

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

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

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

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

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

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

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

Примечание. Я нахожусь на android 1.5

EDIT:

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

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

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

Ответы

Ответ 1

Как говорит Martijn, вы можете проверить, открыто ли ваше приложение с помощью 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
}

Ответ 2

Я думаю, что вы можете отличить "обычный" запуск от запуска "последних приложений", проверив флаги 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).

Итак, когда этот флаг установлен, вы можете отказаться от дополнительных функций.

Ответ 3

Вы должны очистить дополнительные функции от своих намерений после их использования.

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