如何在执行活动期间阻止Android设备的屏幕关闭?

Ale*_*lex 31 android android-activity

我有一个Activity通常需要一些时间来观看屏幕而不与它交互.

问题是屏幕关闭,就像almos任何其他应用程序一样.我想防止我的自动关闭Activity,就像Dolphin HD一样(如果你从设置菜单配置它).

我想让用户按下常用的块按钮来关闭屏幕,但是在我的时候阻止设备的自动阻止Activity.

我怎样才能做到这一点?

感谢名单.

Com*_*are 80

添加android:keepScreenOn="true"到此活动的布局XML资源中的某个窗口小部件.只要该小部件在屏幕上可见,屏幕就不会自动关闭.

编辑:

A WakeLock,正如其他答案所建议的那样,从技术上讲也是可行的.但是你必须手动释放WakeLock(如果你搞砸了,屏幕会长时间停留).而且,既然你可能搞砸了,你需要得到WAKE_LOCK许可.使用keepScreenOn避免所有这些.

  • 如果更改具有"keepScreenOn"属性的视图的可见性,它将无法工作.例如,如果您拥有最初隐藏属性的视图并稍后显示,则屏幕仍将关闭.在这些情况下,使用WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,如"noelicus"的答案中所述. (2认同)

noe*_*cus 31

要动态更改它,请执行以下操作:

if (keepScreenOn)
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
else
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Run Code Online (Sandbox Code Playgroud)


Ada*_*itz 5

处理片段和屏幕旋转

Android 文档“保持设备唤醒”概述了每个解决方案。

解决方案#1 - 标志

文档 -使用唤醒锁的替代方案

对于Fragment,请使用电池消耗较少的编程方法。

使能够

activity!!.window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)

禁用

activity!!.window.clearFlags(LayoutParams.FLAG_KEEP_SCREEN_ON)

对于我的用例,我调用了它,onStop()以便当显示媒体内容的片段退出时,屏幕将默认为正常配置。

避免

keepScreenOn=true当配置发生更改(例如片段的屏幕旋转)时不起作用。

注意: Android 的保持设备唤醒文档应相应更新以处理这种情况。

解决方案 #2 - 唤醒锁

文档 -使用唤醒锁保持 CPU 开启

唤醒锁可以更好地控制保持设备的特定元素处于唤醒状态,但会消耗更多电量,并且需要手动释放以节省电池,因为它不是由系统自动处理的。