2013-10-13 11 views
20

जैसा कि here बताया गया है, जब स्क्रीन बंद हो जाती है, तो वर्तमान गतिविधि के onStop() को कॉल किया जाएगा। मेरे Activity के onStop() को कॉल करने पर मुझे स्क्रीन चालू/बंद स्थिति की जांच करने की आवश्यकता है। इसलिए मैंने इन क्रियाओं के लिए BroadcastReceiver पंजीकृत किया है (ACTION_SCREEN_ON और ACTION_SCREEN_OFF) वर्तमान चालू/बंद स्थिति रिकॉर्ड करने के लिए (और वे ठीक से काम करते हैं, मैंने लॉग किया है!)।
लेकिन जब मैं स्क्रीन बंद कर देता हूं और onStop में चालू/बंद स्थिति की जांच करता हूं, तो यह कहता है कि स्क्रीन चालू है। क्यूं कर? मुझे लगता है कि onStop से पहले रिसीवर को ACTION_SCREEN_OFF प्राप्त करना होगा, तो क्या गलत है?ऑनस्टॉप() में स्क्रीन चालू/बंद स्थिति को कैसे जांचें?

+1

"मुझे लगता है कि रिसीवर को STION कहने से पहले ACTION_SCREEN_OFF प्राप्त करना होगा, तो क्या गलत है?" - मुझे नहीं पता कि आप इसे क्यों मानेंगे। 'लॉग' कथन, या ब्रेकपॉइंट्स का उपयोग करें, यह देखने के लिए कि पहले कौन कहा जाता है। बेहतर अभी तक, किसी भी अन्य कारण की तुलना में, 'ऑनस्टॉप() 'को कॉल किया जा रहा है, इस पर ध्यान देने के लिए अपने ऐप को फिर से डिज़ाइन करें। – CommonsWare

+0

@CommonsWare ऐप उन स्थितियों के बीच भिन्न होना चाहिए जो उन पर 'ऑनस्टॉप' कहलाते हैं, इसलिए मुझे पता होना चाहिए कि स्क्रीन बंद करने से 'ऑनटॉप' कहलाया जा सकता है या दूसरी चीज है। कोई बेहतर समाधान? – Soheil

+0

"ऐप उन स्थितियों के बीच भिन्न होना चाहिए जो उन पर रोक दिया जाता है" - क्यों? यह आपके ऐप में क्या फर्क पड़ता है कि स्क्रीन बंद है या उपयोगकर्ता ने HOME दबाया है, या उपयोगकर्ता ने दबाया है, या उपयोगकर्ता ने आने वाली फोन कॉल या उपयोगकर्ता को अधिसूचना पर टैप किया है, या उपयोगकर्ता ने कुछ और किया है जिससे आपकी गतिविधि अब दिखाई नहीं दे रही है? स्क्रीन बंद करना सामान्य रूप से एक विशेष मामला नहीं है। – CommonsWare

उत्तर

41

आप इस उद्देश्य के लिए PowerManager प्रणाली सेवा का उपयोग करने की कोशिश कर सकते यहाँ उदाहरण और official documentation (इस विधि ध्यान दें API स्तर 7 में जोड़ा गया) है:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
boolean isScreenOn = pm.isScreenOn(); 

संपादित करें:

isScreenOn() विधि अब मान्य नहीं है एपीआई स्तर 21. आप isInteractive बजाय का उपयोग करना चाहिए:

boolean isScreenOn = pm.isInteractive(); 

http://developer.android.com/reference/android/os/PowerManager.html#isInteractive()

+2

उत्कृष्ट अलेक्जेंडर! जिस समय मैं चाहता था उस समय 'ब्रॉडकास्ट रिसीवर' को क्रियाएं नहीं मिलीं लेकिन इसने इसे बनाया :) – Soheil

+0

'pm.isScreenOn()' बहिष्कृत है। –

+0

@SuperThomasLab इसके बजाय क्या उपयोग करें? –

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