2016-09-25 91 views
12

我成功地在Android L中使用DevicePolicyManagerKeyguardManager來鎖定/解鎖我的屏幕。當我使用滑動模式(無安全性)鎖定/解鎖屏幕時,它運行良好。但是,當我使用模式和密碼模式鎖定/解鎖屏幕(更高的安全性)時,我無法鎖定/解鎖它。是否可以使用DevicePolicyManagerKeyguardManager以高安全性鎖定/解鎖屏幕。 ?這就是我所做的如何在Android中使用模式/密碼模式鎖定/解鎖屏幕?

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組件名對象,你提供MainActivity.this爲您的上下文!如果MainActivity當前未運行,則MainActivity.this可能爲NULL。

我建議你啓動具有Service類作爲上下文的adminComponent。