在整个活动过程中保持屏幕清醒

时间:2011-12-09 06:55:33

标签: android screen

我的应用中有三项活动。我希望屏幕在第二次活动时保持清醒状态。除非手动按下“锁定”键,否则屏幕不应在我的第二个活动中熄灭。我经历了许多链接,但我们似乎不清楚。

5 个答案:

答案 0 :(得分:143)

正如Android教程Keep the Screen On中所述,您可以通过几种方式实现此目的。您可以在活动窗口中设置FLAG_KEEP_SCREEN_ON:

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

与此等效的XML是将属性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"/>

但是,正如本教程中所讨论的,唤醒锁更适合其他用例(例如需要CPU在屏幕关闭时继续运行的服务或后台任务)。

答案 1 :(得分:46)

我发现这个解决方案更容易:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" // Whatever your layout is
    ...
    android:keepScreenOn="true"> // Add this line

只需将其添加到您的活动布局XML。

答案 2 :(得分:7)

据我了解您的问题,我认为您必须在申请中使用WAKE_LOCK

类似的东西,

final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE,"");    
mWakeLock.acquire();

在应用程序的manifest.xml文件文件中添加此内容,

<uses-permission android:name="android.permission.WAKE_LOCK" />

答案 3 :(得分:1)

尝试使用此

getWindow().addFlags(
                        WindowManager.LayoutParams.FLAG_FULLSCREEN
                                | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

答案 4 :(得分:1)

不推荐使用此代码,请改为使用此代码:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();

完成使用后,调用(最佳解决方案是在某些活动的onDestroy方法中调用此方法):

wl.release();

有关此link

的详情