Программно отключить экран в телефоне Android из другого потока
Я пытаюсь выключить экран телефона Android.
Я прочитал много других обсуждений и попробовал два способа, описанных здесь: Отключить экран на Android
На самом деле, мне действительно нужно запустить экран блокировки (тот, который запрашивает PIN-код). Я не был уверен, как это сделать, и не смог найти документацию по этому поводу, поэтому попытался выключить экран и надеялся, что при включении телефона отобразится экран блокировки. К сожалению, я не смог проверить свою теорию.
Первый вариант:
PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Your Tag");
wl.acquire();
wl.release();
Второй вариант:
WindowManager.LayoutParams params = getWindow().getAttributes();
params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;
params.screenBrightness = 0;
getWindow().setAttributes(params);
Первый вариант ничего не сделал, а второй вызвал сбой моего приложения. В вызове стека я увидел подозрительный журнал:Only the original thread that created a view hierarchy can touch its views.
Я вызываю этот код из другого потока, работающего в фоновом режиме (не основного потока).
Возможно ли, что это вызывает сбой? Как я могу преодолеть эту проблему?
Есть ли другой способ программно запустить экран блокировки, не выключая экран?
1 ответ
В первом варианте добавьте также ACQUIRE_CAUSES_WAKEUP. Это проснет экран и покажет экран блокировки.
PowerManager.WakeLock wl = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "Your Tag");
Надеюсь это поможет.