禁用保持屏幕开启


72

我用了:

getWindow().addFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

如何恢复为默认状态(不保留)?


我知道答案可以接受,但是我不知道您的用例是什么?您想在屏幕上显示活动时,之后还是继续显示吗?您何时希望将其设置回“默认(不保留)状态”?感谢您的澄清
-Ewoks

4
@Ewoks-一个用例是,当您提供用户首选项以在特定活动(例如,阅读文本)期间保持屏幕打开,并且用户在活动处于活动状态时(或在后退堆栈中)关闭屏幕。然后,您想关闭该标志而不重新启动活动本身。(另一种选择是,在活动完成并重新启动之前,偏好设置的更改才会生效。)
Ted Hopp 2014年

Answers:


146

我认为应该这样做:

getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

有关详细信息,请参见API


6
只是为任何可能不知道的人提供的便条。添加和清除这些标志需要在UI线程上完成。这让我很奇怪。我看到KEEP_SCREEN_ON标志的运行是断断续续的,甚至是相反的,而不仅仅是工作不正常。
Fat Monk

我不知道为什么答案得到这么高的比率却对我不起作用。几个小时后,我真的发现我的应用中还有另一项活动可以保持屏幕打开。因此,如果上述代码对您不起作用,请仔细检查其他活动。:D
thanhbinh84

我在onCreate()中没有问题。可能没关系,但是我总是在setContentView()之前设置我的标志。可能有一个原因,但是很长一段时间以来我一直在使用相同的设置,所以我不记得为什么。另外,如果将minSdkVersion设置为较高的值,则某些标志可能会停止工作。如果某事不起作用,那可能就是原因。
FoxDonut


4

另一种方法

getWindow().setFlags(this.getWindow().getFlags() & ~WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

另请阅读

并且您还可以android:keepScreenOn="true"在xml的根视图中进行设置。


0

直接来自文档:

注意:除非您不再希望屏幕保持在运行的应用程序中(例如,如果您希望屏幕在一段时间不活动后超时),就不需要清除FLAG_KEEP_SCREEN_ON标志。窗口管理器负责确保当应用程序进入后台或返回到前台时,正确的事情发生。但是,如果要显式清除该标志并从而允许屏幕再次关闭,请使用clearFlags():getWindow()。clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.