我的应用中有三个活动。我想在第二个活动中保持屏幕常亮。除非手动按下“锁定”键,否则屏幕不应在我的第二个活动中关闭。我查看了许多链接,但它们对我来说似乎不清楚。
如在Android教程保持屏幕唤醒中所述,你可以通过几种方式实现此功能。你可以在活动窗口上设置FLAG_KEEP_SCREEN_ON:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
在Android中,为了保持屏幕常亮,可以在Activity的布局文件的根视图中添加属性android:keepScreenOn="true"
。通过以编程方式设置标志的优点是您可以使用
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
当您不再需要在应用程序运行时强制屏幕保持唤醒状态时。
另一种控制屏幕(以及其他特定资源)的方法是使用唤醒锁:
mWakeLock = ((PowerManager) getContext().getSystemService(Context.POWER_SERVICE))
.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, getClass().getName());
mWakeLock.acquire();
// screen stays on in this section
mWakeLock.release();
清单文件中必须包含以下权限:
<uses-permission android:name="android.permission.WAKE_LOCK"/>
然而,正如教程中所讨论的那样,唤醒锁(wake lock)更适合于其他用例(例如需要在屏幕关闭时仍需保持CPU运行的服务或后台任务)。
FLAG_KEEP_SCREEN_ON
不是其中之一。即使是 Google 关于保持屏幕常亮的指南 也显示要在调用 setContentView()
后设置此标志,并指出您可以在活动生命周期内随时设置和清除它。 - Ted Hopp我觉得这个解决方案更容易:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" // Whatever your layout is
...
android:keepScreenOn="true"> // Add this line
只需将此添加到您的活动布局XML中。
WAKE_LOCK
。类似于以下内容:final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE,"");
mWakeLock.acquire();
并在文件中添加此内容,
<uses-permission android:name="android.permission.WAKE_LOCK" />
尝试使用这个
getWindow().addFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
这段代码已过时,请使用以下代码替代:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();
使用完毕后,调用以下方法(最佳解决方案是在某个活动的onDestroy方法中调用此方法):
wl.release();
关于此事更多信息,请查看此link。