2011-02-01 23 views
13

बिट में इस्तेमाल अतिरिक्त के अंतिम सेट यहाँ के साथ शुरू होता है:एंड्रॉयड: 'हाल के अनुप्रयोगों' से शुरू एप्लिकेशन मेरे लिए एक भ्रामक समस्या का एक आशय

मैं एक घर स्क्रीन विजेट, जो क्लिक मिल गया है, आशय में डाल कुछ अतिरिक्त के साथ अपने मुख्य अनुप्रयोग गतिविधि शुरू होता है:

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

यह सब ठीक काम करता है, यह मेरी गतिविधि शुरू होता है और उम्मीद के रूप में मेरे गतिविधि एक्स्ट्रा कलाकार प्राप्त करता है। यह इन अतिरिक्त प्रक्रियाओं को संसाधित करता है और एक और गतिविधि शुरू करता है।

एक बार जब उपयोगकर्ता ने होम स्क्रीन विजेट पर क्लिक किया है और इस तरह से मुख्य गतिविधि शुरू की है, तो 'हालिया अनुप्रयोगों' विधि ('होम' कुंजी को दबाकर) में ऐप में जाकर अतिरिक्त गतिविधि के साथ मुख्य गतिविधि शुरू होती है - ऐसा प्रसंस्करण होता है जो मैं नहीं चाहता (और दूसरी गतिविधि को खोलने के बजाए, मुख्य गतिविधि के बजाए सिर्फ दिखाया जा सकता है)।

क्या इसके लिए कोई काम है? 'हालिया अनुप्रयोगों' विधि से ऐप शुरू करते समय, मैं केवल अतिरिक्त गतिविधि के बिना मुख्य गतिविधि शुरू करना चाहता हूं।

सहायता के लिए बहुत धन्यवाद! r3mo

नोट:

एक समाधान यहाँ मिला:: मैं एंड्रॉयड 1.5

संपादित करें पर हूँ Android keeps caching my intents Extras, how to declare a pending intent that keeps fresh extras?

मैं आशय विजेट द्वारा बंद सेट किया जा रहा टाइमस्टैम्प के लिए जा रहा हूँ, और जांचें कि टाइमस्टैम्प हाल ही में Main.java में है। यदि ऐसा है, तो मैं प्रसंस्करण के साथ आगे बढ़ जाऊंगा। यदि नहीं, तो मैं केवल मुख्य.जावा गतिविधि दिखाऊंगा।

यह सुनकर उत्सुक है कि इसके लिए कोई आधिकारिक समाधान है या नहीं।

उत्तर

0

आपको उनका उपयोग करने के बाद अपने इरादे से अतिरिक्त को साफ़ करना चाहिए।

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

सुझाव के लिए धन्यवाद। मैंने अभी मेन.जावा (जिसे विजेट द्वारा शुरू किया गया है) में यह कोशिश की है और ऐसा कोई फर्क नहीं पड़ता है। क्या यह सिर्फ स्थानीय चर 'अतिरिक्त' को साफ़ नहीं करेगा? मेरा मानना ​​है कि समस्या यह है कि कैसे एंड्रॉइड 'हालिया आवेदन' गतिविधि शुरू कर रहा है, इसके अतिरिक्त पास के अतिरिक्त सेट के साथ। – r3mo

9

मुझे लगता है कि आप इरादे झंडे की जांच करके "हालिया अनुप्रयोगों" स्टार्टअप से "सामान्य" स्टार्टअप को अलग कर सकते हैं; वहाँ दस्तावेज़ के अनुसार एक झंडा

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

मार्टिन कहते हैं, तो आप देख सकते हैं कि आपके आवेदन झंडा 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

दुर्भाग्यवश यह ध्वज विश्वसनीय होने पर सेट नहीं होना चाहिए। –

संबंधित मुद्दे