2016-09-26 9 views
12

मेरे पास फोन की स्क्रीन के चार राज्यों को निर्धारित करने के लिए एक फ़ंक्शन है: स्क्रीन पर स्क्रीन, स्क्रीन बंद करें, लॉक के साथ स्क्रीन, लॉक के बिना स्क्रीन। मेरा कार्यमें विफलता परिणाम लौटाएं KeyguardRestrictedInputMode()

private KeyguardManager keyguardManager; 
public String getScreenStatus() 
{ 
    String sreen_State="unknown"; 
    keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); 
    PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) { 
     if (pm.isInteractive()) { 
      sreen_State="screen_on"; 
      if(!keyguardManager.inKeyguardRestrictedInputMode()) { 
       sreen_State="screen_on_no_lock_screen"; 

      }else{ 
       Log.i(TAG, "screen_on_lock_screen"); 
       sreen_State="screen_on_lock_screen"; 
      } 
     } 
     else { 
      sreen_State="screen_off"; 
     } 
    } 
    else if(Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT_WATCH){ 
     if(pm.isScreenOn()){ 
      sreen_State="screen_on"; 
      if(!keyguardManager.inKeyguardRestrictedInputMode()) { 
       Log.i(TAG, "screen_on_no_lock_screen"); 
       sreen_State="screen_on_no_lock_screen"; 

      }else{ 
       Log.i(TAG, "screen_on_lock_screen"); 
       sreen_State="screen_on_lock_screen"; 
      } 

     } 
     else { 
      mIsScreenOn=false; 
      sreen_State="screen_off"; 
     } 
    } 
    return sreen_State; 
} 

उपर्युक्त फ़ंक्शन स्क्रीन के राज्यों को सही करता है। हालांकि, जब मैं एक और कोड जोड़ता हूं तो इसमें त्रुटि होती है:

KeyguardManager.KeyguardLock 
kl = keyguardManager.newKeyguardLock("MyKeyguardLock"); 
if(index.equals("1")) 
     kl.disableKeyguard(); 
    else if(indexequals("2")) 
     kl.reenableKeyguard(); 
    getScreenStatus(); 

सूचकांक एक बटन दबाकर बदल सकता है। अब, स्क्रीन की गलत स्थिति होती है। यह हमेशा screen_on_lock_screen लौटाता है, हालांकि स्क्रीन screen_on_no_lock_screen में है। मैं अपनी समस्या को कैसे ठीक कर सकता हूं?

+0

क्या आप और कोड जोड़ सकते हैं? कौन सा वर्ग और विधि में दूसरा कोड स्निपेट है? – Vall0n

उत्तर

2

KeyguardManager.NewKeyguardLock का उपयोग कर हटा दिया गया है के बाद से एपीआई स्तर 13. आप FLAG_DISMISS_KEYGUARD और WindowManager.LayoutParams की FLAG_SHOW_WHEN_LOCKED साथ इसे करने की कोशिश किया।

इस वर्ग एपीआई स्तर में पदावनत किया गया था 13. उपयोग FLAG_DISMISS_KEYGUARD और/या बजाय FLAG_SHOW_WHEN_LOCKED; यह आपको कुंजीपटल को बिना किसी छिपाने के लिए अनुमति देता है क्योंकि आपका एप्लिकेशन अग्रभूमि में और बाहर चला जाता है और इसकी आवश्यकता नहीं होती है कि किसी भी विशेष अनुमति का अनुरोध किया जाए। > नए केगार्ड लॉक (स्ट्रिंग) द्वारा वापस संभाला गया है जो आपको कुंजीगार्ड को पुनः सक्षम करने के लिए /> अक्षम करने की अनुमति देता है।

यहां लिंक Android documentation है।

उम्मीद है कि यह मदद करता है!

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