Android:如何以编程方式打开和关闭屏幕?

2024-05-02

在将这篇文章标记为“重复”之前,我写这篇文章是因为没有其他文章可以解决该问题。

我正在尝试关闭设备,然后在几分钟或传感器发生变化后,将其重新打开。

关闭显示测试

我可以使用以下方法关闭屏幕:

params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;
params.screenBrightness = 0;
getWindow().setAttributes(params);

我无法使用 wl.release() 方法关闭屏幕。

打开显示测试

我的第一个猜测如下,是行不通的。什么也没发生,屏幕保持关闭状态。

params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;
params.screenBrightness = -1f;
getWindow().setAttributes(params);

然后我也尝试使用唤醒锁,但没有成功。

PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "tag");
wl.acquire();

最后我尝试了以下方法,但没有结果。

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

总而言之,对于这些方法中的任何一种,我都没有在控制台中收到任何类型的错误。当我使用电源按钮打开设备时,我的测试文本“屏幕应该打开”出现在屏幕上。这表明代码应该已经运行。请仅在您测试过代码后回答,似乎有很多功能,例如params.screenBrightness = -1,不按照 sdk 的规定工作。


我假设您只希望当您的应用程序位于前台时它才有效。

这段代码:

params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;
params.screenBrightness = 0;
getWindow().setAttributes(params);

不会传统意义上关闭屏幕。它使屏幕尽可能暗。在标准平台中,其亮度是有限制的;如果您的设备实际上允许屏幕完全关闭,那么这是该设备实现的一些特殊性,而不是您可以依赖的跨设备行为。

事实上,将其与 FLAG_KEEP_SCREEN_ON 结合使用意味着您永远不会允许屏幕关闭(从而设备进入低功耗模式),即使特定设备允许您将屏幕亮度设置为完全关闭。请牢记这一点。与屏幕真正关闭时相比,您将使用更多的电量。

现在,要将屏幕恢复为常规亮度,只需设置亮度值即可:

WindowManager.LayoutParams params = getWindow().getAttributes();
params.screenBrightness = -1;
getWindow().setAttributes(params);

我无法解释为什么这不会替换您之前设置的 0 值。作为测试,您可以尝试在其中强制设置全亮度以强制达到该特定亮度:

WindowManager.LayoutParams params = getWindow().getAttributes();
params.screenBrightness = 1;
getWindow().setAttributes(params);

这绝对有效。例如,Google 的图书应用程序使用此功能,允许您在使用图书时将屏幕亮度设置为变暗,然后在关闭时返回到常规亮度。

为了帮助调试,您可以使用“adb shell dumpsys window”来查看窗口的当前状态。在窗口的数据中,它将告诉您为其设置的当前 LayoutParams。确保您认为的价值确实存在。

再次强调,FLAG_KEEP_SCREEN_ON 是一个单独的概念;它和亮度相互没有直接影响。 (如果您在将亮度设置为 0 时已经设置了该标志,那么在撤消亮度时就没有理由再次设置该标志。该标志将保持设置状态,直到您更改它。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:如何以编程方式打开和关闭屏幕? 的相关文章

随机推荐