2011-02-01 3 views
13

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

Я получил экран виджет домой, при нажатии, начинает свое основное приложение активность с некоторыми дополнениями, заложенных в намерении:

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

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

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

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

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

Примечание: Я на андроид 1,5

EDIT:

нашел обходной путь здесь: Android keeps caching my intents Extras, how to declare a pending intent that keeps fresh extras?

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

Ужасно, если есть какие-либо официальные решения.

ответ

0

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

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

Спасибо за предложение. Я только что попробовал это в Main.java (который запускается виджетами), и это, похоже, не имеет никакого значения. Будет ли это не просто очищать локальные переменные «дополнительные»? Я считаю, что проблема заключается в том, как Android запускает активность «последнего приложения» с последним набором дополнений, переданных ему. – r3mo

9

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

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

38

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

К сожалению, этот флаг не установлен точно, когда он должен быть. –