Как заблокировать / разблокировать экран с помощью режима Pattern / Password в Android?

Мне удалось заблокировать / разблокировать мой экран с помощью DevicePolicyManager и KeyguardManager в Android L. Он работал хорошо, когда я блокировал / разблокировал экран с помощью режима прокрутки (без защиты). Однако я не могу заблокировать / разблокировать его, когда я блокирую / разблокирую экран, используя режим Pattern и Password (более высокая безопасность). Можно ли заблокировать / разблокировать экран с высокой степенью безопасности с помощью 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(); 

Обратите внимание, что я использую его в службе.

Solutions Collecting From Web of "Как заблокировать / разблокировать экран с помощью режима Pattern / Password в Android?"

Вероятно, проблема заключается в том, что вы не вызываете окно из контекста.

 keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); 

Используя следующий фрагмент :

 //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); 

Со следующими оговорками:

Заметка
Для выполнения следующих действий вам потребуется ссылка на активность, которая может разговаривать с объектом окна.

Также связан с программным обеспечением « Как заблокировать / разблокировать экран»? И блокировка / разблокировка экрана Android программно

Вы упомянули, что используете код в службе, но при создании объекта adminComponent ComponentName вы предоставляете MainActivity.this как ваш контекст! MainActivity.this может быть NULL, если ваш MainActivity в настоящее время не запущен.

Я предлагаю вам инициировать adminComponent с классом Service как Контекст.