2011-06-16 9 views
34

मैं नहीं चाहता कि उपयोगकर्ता मेरे ऐप की स्प्लैशस्क्रीन पर वापस जा सके। एक समाधान यह जांचना प्रतीत होता है कि वर्तमान में नीचे की गतिविधि स्प्लैशस्क्रीन का एक उदाहरण है, और उस स्थिति में ऐप से बाहर निकलें, जैसा कि नीचे दिए गए कोड में दिखाया गया है। हालांकि, मुझे नहीं पता कि कैसे जांचें कि स्टैक में पिछली गतिविधि क्या है। कोई भी मदद कर सकता है? क्या किसी दिए गए गतिविधि में 'वापस जाएं' अक्षम करने का कोई अन्य तरीका है? ठीक बगल में गतिविधि शुरू करने के बादमैं कुछ गतिविधि में 'वापस जाएं' को कैसे अक्षम कर सकता हूं?

@Override 
public void onBackPressed() { 
    if(<previous activity in stack is an instance of splashscreen>){ 
     Intent exit_intent=new Intent(CurrentActivity.this, SplashScreen.class); 
     exit_intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     exit_intent.putExtra("EXIT", true); 
     context.startActivity(exit_intent); 
    } 
} 

उत्तर

110

कॉल अपने स्पलैश स्क्रीन गतिविधि में finish()

एक और दृष्टिकोण AndroidManifest.xml में अपनी गतिविधि को यह विशेषता जोड़ने के लिए है: android:noHistory="true"

उदाहरण:

<activity android:name=".SplashActivity" android:noHistory="true"/> 

यह विशेषता एंड्रॉयड का निर्देश इतिहास ढेर से SplashActivity दूर करने के लिए एक बार से दूर अपने नेविगेट किया है।

+0

धन्यवाद एक बहुत "एंड्रॉयड: noHistory =" true "" - यह बहुत ही मददगार थे! – Simcha

+0

फिनिश() काम क्यों करता है? – Joop

+0

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

19

बस context.finish() के बाद context.startActivity()

+5

अच्छा विकल्प, जिसे [अग्रेषण] के रूप में जाना जाता है (http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/Forwarding.html) –

+0

मई अगली गतिविधि शुरू करने पर मीडिया फ़ाइल चलाने के लिए काम न करें। क्योंकि यह छोटा हो सकता है। – Mike6679

+0

मेरे लिए एसडीके 22 काम नहीं करता है .... – Micro

9

फोन निम्नलिखित जब अगले Activity अपने Splashscreen से फोन कर प्रयास करें:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); 
2
<activity android:name=".SplashActivity" android:noHistory="true"/> 

documentation से:

किया जाए या नहीं गतिविधि गतिविधि स्टैकसे हटा दिया जाना चाहिएऔर समाप्त हो गया (इसकी समाप्ति() विधि कहा जाता है) जब उपयोगकर्ता से इसे नेविगेट करता है और यह अब स्क्रीन पर दिखाई नहीं देता है - "सत्य" अगर यह समाप्त होना चाहिए, और "झूठी" नहीं है। मूल मूल्य गलत है"।

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

यह विशेषता एपीआई स्तर में पेश किया गया था 3.