2016-09-25 14 views
12

Tôi đã khóa thành công/mở khóa màn hình của mình bằng cách sử dụng DevicePolicyManagerKeyguardManager trong Android L. Nó hoạt động tốt khi tôi khóa/mở khóa màn hình bằng chế độ vuốt (không có bảo mật). Tuy nhiên, tôi không thể khóa/mở khóa khi tôi khóa/mở khóa màn hình bằng cách sử dụng chế độ Mẫu và Mật khẩu (bảo mật cao hơn). Có thể khóa/mở khóa màn hình với độ bảo mật cao bằng cách sử dụng DevicePolicyManagerKeyguardManager. ? Đây là những gì tôi đã làmLàm cách nào để khóa/mở khóa màn hình bằng chế độ Mẫu/Mật khẩu trong 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(); 

Lưu ý rằng, tôi đang sử dụng nó trong một dịch vụ.

Trả lời

0

Vấn đề có thể là bạn không gọi cửa sổ từ ngữ cảnh.

keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); 

Sử dụng 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); 

Với caveat sau:

Note
Đối với những điều sau đây để làm việc bạn cần tham chiếu đến một hoạt động mà có thể nói chuyện với các cửa sổ vật.

Cũng liên quan How to Lock/Unlock screen programmatically?Android screen lock/ unlock programmatically

+1

Trước tiên, tôi đang sử dụng chức năng trong dịch vụ, tôi nghĩ tùy chọn của bạn không phù hợp với trường hợp của tôi. Thứ hai, tôi đã thử nó trong mã của tôi (dịch vụ) và nó không hoạt động – user3051460

0

Bạn nói rằng bạn đang sử dụng mã trong một dịch vụ, nhưng trong khi xây dựng adminComponent ComponentName của bạn đối tượng mà bạn cung cấp MainActivity.this như bối cảnh của bạn! MainActivity.this có thể là NULL nếu MainActivity của bạn hiện không chạy.

Tôi khuyên bạn nên khởi tạo adminComponent với lớp Dịch vụ làm Ngữ cảnh.

Các vấn đề liên quan