2016-09-25 89 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。