Android: запуск приложения из «последних приложений» запускает его с последним набором дополнений, использованных в намерении.

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

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

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

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

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

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

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

Примечание: у меня андроид 1.5

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

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

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

Хотелось бы услышать, есть ли какие-либо официальные решения по этому поводу.


person r3mo    schedule 01.02.2011    source источник


Ответы (3)


Как говорит Мартейн, вы можете проверить, открыто ли ваше приложение с помощью 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
}
person Mr Auni    schedule 03.04.2012
comment
К сожалению, этот флаг не устанавливается надежно, когда это должно быть. - person Chris Stratton; 02.07.2014

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

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

person Martijn Coenen    schedule 11.04.2011

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

Bundle extras = getIntent().getExtras();
if (extras == null) {
    return;
}
String value1 = extras.getString("Value1");
String value2 = extras.getString("Value2");
extras.clear();
person ZoltanT    schedule 01.02.2011
comment
Спасибо за предложение. Я только что попробовал это в Main.java (который запускается виджетом), и это, похоже, не имеет никакого значения. Не будет ли это просто очисткой локальной переменной «extras»? Я считаю, что проблема заключается в том, как Android запускает действие «недавнее приложение» с последним набором дополнений, переданных ему. - person r3mo; 01.02.2011