我正在尝试关闭 Android 手机的屏幕。
我阅读了许多其他讨论,并尝试了此处描述的两种方法: Turn off screen on 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);
第一个选项没有执行任何操作,第二个选项导致我的应用程序崩溃。在堆栈调用中,我看到了一条可疑的日志:
只有创建 View 层次结构的原始线程才能触摸其 View 。
我确实从在后台运行的另一个线程(而不是主线程)调用此代码。
这有可能导致崩溃吗?我该如何克服这个问题?
是否有另一种方法可以以编程方式启动锁定屏幕,而无需关闭屏幕?
最佳答案
在第一个选项中,还添加 ACQUIRE_CAUSES_WAKEUP。这将唤醒屏幕并显示锁定屏幕。
PowerManager.WakeLock wl = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "Your Tag");
希望这有帮助。
关于java - 从另一个线程以编程方式关闭 Android 手机中的屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36986759/