2012-10-02 11 views
6

आमतौर पर, एंड्रॉइड को Activity पर अस्पष्ट या छुपा होने पर शुरू होता है, उसके बाद onStop होता है जब यह अब बिल्कुल नहीं दिखाया जाता है। मेरे खेल में, मैं में गेम को रोकता हूं, इसलिए उपयोगकर्ता कहीं और देखकर गेम खो नहीं जाता है।गतिविधि को कैसे बताया जाए अधिसूचना क्षेत्र द्वारा कवर किया गया है?

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

उत्तर

3

चूंकि StatusBarManager आधिकारिक एपीआई का हिस्सा नहीं है, इसलिए मुझे यह पता लगाने की संभावना नहीं है कि इसका पता लगाने का कोई तरीका है। प्रतिबिंब का उपयोग करने के बावजूद, स्टेटसबार-वर्गों में से कोई भी श्रोताओं के लिए एक हुक नहीं लगता है।

यदि यह व्यवहार्य है, तो आप deactivate the statusbar कर सकते हैं। अन्यथा, मुझे लगता है कि आप भाग्य :(

+0

कोई फर्क नहीं पड़ता। जब अधिसूचना खींची जाती है तो 'ऑनविंडो फोकस चेंजेड' गतिविधि में ट्रिगर हो जाती है। –

8

Activity की onWindowFocusChanged(boolean hasFocus) आवश्यक उद्देश्य पूरा करना चाहिए से बाहर हैं। यह false साथ कहा जाता है जब सूचना क्षेत्र नीचे घसीटा जाता है, और true के साथ एक बार क्षेत्र वापस ऊपर घसीटा जाता है। The इसी Android documentation कहा गया है कि इस विधि "चाहे इस गतिविधि उपयोगकर्ता को दिखाई देता है का सर्वोत्तम संकेतक है"। यह भी स्पष्ट रूप से कहा है कि जब "स्थिति पट्टी अधिसूचना पैनल" दिखाया गया है कॉलबैक शुरू हो रहा है।

यह ध्यान रखना महत्वपूर्ण है कि इस विधि को अन्य परिस्थितियों में भी बुलाया जाता है। एक अच्छा उदाहरण AlertDialog का प्रदर्शन है। onWindowFocusChanged को तब भी कहा जाता है जब गतिविधि स्वयं AlertDialog दिखाती है। इस पर निर्भर करता है कि आपका गेम अलर्टडिअलॉग या कुछ और जो फोकस चेंज का कारण बनता है, इस पर निर्भर करता है।

इस प्रश्न में वर्णित एक जैसा परिदृश्य में, हमने onWindowFocesChanged विधि सफलतापूर्वक उपयोग की है, उदा। एंड्रॉइड 4.4 के साथ नेक्सस 5 पर, या एंड्रॉइड 4.1 के साथ सोनी एक्सपीरिया टैबलेट पर।