2016-09-25 6 views
12

मैं एंड्रॉइड एल में DevicePolicyManager और KeyguardManager का उपयोग करके अपनी स्क्रीन को लॉक/अनलॉक करने में सफल रहा। यह स्वाइप मोड (कोई सुरक्षा नहीं) का उपयोग करके स्क्रीन लॉक/अनलॉक करते समय अच्छा काम करता था। हालांकि, जब मैं पैटर्न और पासवर्ड मोड (उच्च सुरक्षा) का उपयोग करके स्क्रीन को लॉक/अनलॉक करता हूं तो मैं इसे लॉक/अनलॉक नहीं कर सकता। DevicePolicyManager और KeyguardManager का उपयोग कर उच्च सुरक्षा वाले स्क्रीन को लॉक/अनलॉक करना संभव है। ? यह मैंने किया हैएंड्रॉइड में पैटर्न/पासवर्ड मोड के साथ स्क्रीन को लॉक/अनलॉक कैसे करें?

protected static final int REQUEST_ENABLE = 0; 
DevicePolicyManager devicePolicyManager; 
ComponentName adminComponent; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button button = (Button) findViewById(R.id.btn); 
    button.setOnClickListener(btnListener); 

} 

//LOCK 
Button.OnClickListener btnListener = new Button.OnClickListener() { 
    public void onClick(View v) { 
     adminComponent = new ComponentName(MainActivity.this, Darclass.class); 
     devicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); 

     if (!devicePolicyManager.isAdminActive(adminComponent)) { 

      Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 
      intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, adminComponent); 
      startActivityForResult(intent, REQUEST_ENABLE); 
     } else { 
      devicePolicyManager.lockNow(); 
     } 

    } 
}; 

//UNLOCK 
private KeyguardManager keyguardManager; 
KeyguardManager.KeyguardLock kl; 
keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); 
kl = keyguardManager.newKeyguardLock("MyKeyguardLock"); 
kl.disableKeyguard(); 

ध्यान दें कि, मैं इसे एक सेवा में उपयोग कर रहा हूं।

उत्तर

0

समस्या यह है कि आप संदर्भ से विंडो को नहीं बुला रहे हैं।

keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); 

the following snippet का उपयोग करना:

नोट
आप एक गतिविधि है कि खिड़की से बात कर सकते करने के लिए संदर्भ की आवश्यकता काम करने के लिए निम्नलिखित के लिए: निम्नलिखित चेतावनी के साथ

//Get the window from the context 
WindowManager wm = Context.getSystemService(Context.WINDOW_SERVICE); 

//Unlock 
//http://developer.android.com/reference/android/app/Activity.html#getWindow() 
Window window = getWindow(); 
window.addFlags(wm.LayoutParams.FLAG_DISMISS_KEYGUARD); 

//Lock device 
DevicePolicyManager mDPM; 
mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE); 

वस्तु।

साथ ही इससे संबंधित How to Lock/Unlock screen programmatically? और Android screen lock/ unlock programmatically

+1

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

0

आपने कहा है कि आप एक सेवा में कोड का उपयोग कर रहे, लेकिन आपका adminComponent ComponentName निर्माण पर आपत्ति है कि आप अपने संदर्भ के रूप में MainActivity.this प्रदान! मुख्य गतिविधि। यदि आपकी मुख्य गतिविधि वर्तमान में चल रही नहीं है तो यह शून्य हो सकता है।

मेरा सुझाव है कि आप सेवा वर्ग के साथ कॉन्टेक्स्ट के रूप में व्यवस्थापक कॉम्पोनेंट शुरू करें।

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

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