2012-07-20 19 views
8

मेरे पास एक गतिविधि है जिसे यूआरएल फिल्टर उद्देश्यों के साथ कई अन्य सक्रियताओं से लॉन्च किया जा सकता है।गतिविधि स्टैक खाली होने पर मुख्य गतिविधि लॉन्च करें

इस गतिविधि पर मैं बैक बटन के रूप में एक्शनबार में होम आइकन का उपयोग करता हूं, जिससे उपयोगकर्ता पिछली गतिविधि (और "होम" एक्शन के रूप में नहीं) को वापस लाता है। अभी के लिए मैं फिनिश() फ़ंक्शन को कॉल करके ऐसा करता हूं। आवेदन के भीतर से काम करते समय यह ठीक काम करता है।

हालांकि, अगर एक यूआरएल फ़िल्टर इरादे से गतिविधि लॉन्च करना है, तो मैं चाहता हूं कि घर आइकन उपयोगकर्ता को मुख्य गतिविधि में लाए। जाहिर है, कॉलिंग फिनिश() गतिविधि को बंद कर देगा।

तो मेरा सवाल यह है कि क्या यह जांचने का कोई तरीका है कि मेरा एप्लिकेशन स्टैक खाली है या फिर सही होने पर मुख्य औसत लॉन्च करें? या क्या मैं इस गलत तरीके से हमला कर रहा हूं?

उत्तर

12

अपने अनुप्रयोग यूआरएल लक्ष्य फ़िल्टर के माध्यम से शुरू की है और यह अपने आप ही काम बनाता है, तो आप उपयोग कर सकते हैं

if (isTaskRoot()) { 
    // This activity is at root of task, so launch main activity 
} else { 
    // This activity isn't at root of task, so just finish() 
} 

संपादित करें: जोड़ा गया एक और संभव विधि

आपका ऐप्लिकेशन में शुरू किया जाता है तो मौजूदा कार्य जब यह यूआरएल लक्ष्य फ़िल्टर के माध्यम से शुरू की है, तो आप की तरह कुछ कर सकते हैं निम्नलिखित:

जब आप अपने आवेदन में अन्य गतिविधियों से अपनी गतिविधि का शुभारंभ, आशय के लिए एक अतिरिक्त जोड़ने इस तरह:

Intent intent = new Intent(this, MyActivity.class); 
intent.putExtra("internal", "true"); 
startActivity(intent); 

अपनी गतिविधि यह तो इस तरह आशय में उपस्थिति या अतिरिक्त के अभाव के लिए जाँच निर्धारित करने के लिए कि क्या यह आंतरिक रूप से या यूआरएल आशय फिल्टर के माध्यम से शुरू किया गया था सकता है, का शुभारंभ हो जाता है जब:

Intent intent = getIntent(); 
if (intent.hasExtra("internal")) { 
    // Launched internally 
} else { 
    // Launched via intent-filter 
} 
+0

एक अच्छा समाधान की तरह लग रहा था, लेकिन दुर्भाग्य से यह काम नहीं करता। isTaskRoot() दोनों स्थितियों में झूठी रिटर्न देता है। मुझे लगता है कि मुझे इसे काम करने की ज़रूरत है जब यह एक नया कार्य लॉन्च नहीं कर रहा है (यानी ऐप पहले से ही पृष्ठभूमि में चल रहा है?)। मैं गतिविधि/कार्य से निपटने के आसपास मेरे सिर लपेटो नहीं कर सकते .. – SveinT

+1

किसी अन्य विधि के बाद से अपनी गतिविधि स्पष्ट रूप से एक मौजूदा कार्य में शुरू की है आप उपयोग कर सकते हैं जोड़ने के लिए मेरा उत्तर संपादित। –

+0

यह निश्चित रूप से काम करना चाहिए, लेकिन मुझे लगता है कि एक क्लीनर समाधान मौजूद है? जीमेल ऐप और अन्य समान व्यवहार को लागू करते हैं। किसी भी तरह से, यह करना होगा। धन्यवाद! – SveinT

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