2012-01-25 20 views
13

में लॉक किया गया है मेरे आवेदन के लिए, मुझे यह जानना होगा कि स्क्रीन लॉक है। यह कैसे जांचें समस्याग्रस्त है।स्क्रीन को कैसे ढूंढें एंड्रॉइड

if(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON != 0){ 
    // some code 
}else if((WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED)!= 0){ 
    // some code 
} 

लेकिन यह हमेशा दोनों अगर और बाकी हिस्सा ... जो झंडा मैं जाँच करने के लिए स्क्रीन या लॉक नहीं उपयोग करने के लिए क्रियान्वित: मैं निम्नलिखित ध्वज का इस्तेमाल किया

+0

निम्नलिखित देखें लिंक [http://stackoverflow.com/questions/3170563/android-detect-phone-lock-event][1] [http://stackoverflow.com/questions/8317331/detecting-when-screen-is-locked][2] [http://stackoverflow.com/questions/3446202/android-detect- फोन-अनलॉक-इवेंट-न-स्क्रीन-ऑन] [3] [1]: http: // stackoverflow।कॉम/प्रश्न/3170563/एंड्रॉइड-डिटेक्ट-फोन-लॉक-इवेंट [2]: http://stackoverflow.com/questions/8317331/detecting-when- स्क्रीन-is- लॉक [3]: http: //stackoverflow.com/questions/3446202/android-detect-phone-unlock-event-not-screen-on – Shruti

+5

यह और कैसे दोनों निष्पादित करेगा? –

+0

http://stackoverflow.com/questions/8968265/android-auto-logout-when-app-goes-to-background/8968763#8968763 –

उत्तर

1

कार्रवाई android.intent.action.ACTION_SCREEN_OFF के साथ एक प्रसारण रिसीवर पंजीकृत करें और रिसीवर के ऑनसेसिव() विधि में अपना कोड लिखें।

यदि आप किसी गतिविधि का उपयोग कर रहे हैं, तो स्क्रीन लॉक होने पर स्क्रीन लॉक होने पर और रेज्यूम() को कॉल किया जाएगा जब स्क्रीन अनलॉक किया जाएगा।

अपने कोड में आप कुछ झंडे की जांच कर रहे हैं, मुझे नहीं पता कि आप कहां जांच करेंगे? क्या यह निरंतर सत्यापन है? यदि आप अपने ऐप में कोई गतिविधि का उपयोग कर रहे हैं, तो उपर्युक्त प्रक्रिया होगी, बस इसे एंड्रॉइड डेवलपर्स वेबसाइट में देखें।

+0

@ बाबू: आपके उत्तर के लिए बहुत बहुत धन्यवाद। मैं कोशिश करूंगा :) – Prasad

0

स्क्रीन लॉक & अनलॉक करने के लिए प्रसारण किए गए इरादे हैं।

की जांच यह पसंद:

if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)){//LOGIC Here} 

मुझे पता करते हैं!

+0

उपरोक्त शर्त ब्रॉडकास्ट रिसीवर में जांच की जानी चाहिए? – Prasad

+0

: मैंने वही काम किया लेकिन काम नहीं कर रहा :( – Prasad

22

मैं इसका उत्तर देने की कोशिश करूंगा हालांकि सवाल पहले से ही पुराना है क्योंकि यह अनसुलझा है और अन्य googlers की मदद कर सकता है। ;)

सबसे पहले आपको Intent.ACTION_SCREEN_OFF & Intent.ACTION_SCREEN_ON के लिए ब्रॉडकास्ट रिसीवर पंजीकृत करना होगा। ध्यान दें कि यह रिसीवर कोड में पंजीकृत होना चाहिए और मैनिफेस्ट में घोषित होने पर काम नहीं करेगा।

अपने प्रसारण रिसीवर में, जब आप Intent.ACTION_SCREEN_ON प्राप्त करते हैं, आप देख सकते हैं कि स्क्रीन के ठीक नीचे कोड का उपयोग करके बंद कर दिया जाता है:

KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); 
boolean locked = km.inKeyguardRestrictedInputMode(); 
+1

लिंक के नीचे ऐसा लगता है कि ब्रॉडकास्ट रिसीवर की आवश्यकता नहीं है http://stackoverflow.com/a/8668648/401403 – Arash

0

यहाँ मैं क्या किया है:

यह अगर संभालती उपयोगकर्ता ने स्क्रीन को अनलॉक कर दिया है, लेकिन अभी तक होम स्क्रीन में प्रवेश नहीं किया है या किसी कॉल के दौरान उपयोगकर्ता की स्क्रीन बंद है।

  if (Intent.ACTION_SCREEN_ON.equals(pIntent.getAction()) || 
        Intent.ACTION_USER_PRESENT.equals(pIntent.getAction())) { 
       if(mListener!=null) { 
        KeyguardManager km = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE); 
        boolean locked = km.inKeyguardRestrictedInputMode(); 
        Log.v(TAG, ": Phone lock state from KEYGUARD_SERVICE: Current state:" + (locked ? "LOCKED":"UNLOCKED")); 
        mIsPhoneLocked = locked; 
       } 
      } 
1

मैं आप पहले से ही इस सवाल का जवाब तो मिलीं लेकिन वे (और अन्य डेवलपर्स के लिए) यदि हो सकता है लगता है, तो आप इस तरह यह कर सकते हैं:

   PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); 
       boolean isScreenOn = powerManager.isScreenOn(); 

if (!isScreenOn) { 
      //Screen is in OFF State 
      //Code to power on and release lock 



       KeyguardManager km = (KeyguardManager) this 
       .getSystemService(Context.KEYGUARD_SERVICE); 
       final KeyguardManager.KeyguardLock kl = km 
       .newKeyguardLock("MyKeyguardLock"); 
       kl.disableKeyguard(); 

       PowerManager pm = (PowerManager) this 
       .getSystemService(Context.POWER_SERVICE); 
       WakeLock wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK 
       | PowerManager.ACQUIRE_CAUSES_WAKEUP 
       | PowerManager.ON_AFTER_RELEASE, "MyWakeLock"); 
       wakeLock.acquire(); 
} 
3
KeyguardManager myKeyManager = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE); 

if(myKeyManager.inKeyguardRestrictedInputMode()) { 

//screen is locked 

} else { 

//screen is not locked 

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