9

很长一段时间我以为我知道如何阻止屏幕进入睡眠模式,我只是在我的 Activity 中使用了这段代码:

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

但是,我意识到这仅在我的手机处于“开发人员模式”时才有效,即启用/检查 USB 调试(设置 --> 开发人员选项 --> USB 调试)时。然后上面的代码确实停止了屏幕/设备进入睡眠状态。

如果不检查该调试,那么我的屏幕就会像没有明天一样进入睡眠状态。我在我的设备上运行 Android 4.04,并且

 android:minSdkVersion="12"
 android:targetSdkVersion="16"

编辑

我已经用 Commonsware 的建议进行了测试,并将 setKeepScreenOn() 添加到代码中,所以它看起来像这样:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
View root = findViewById(android.R.id.content); 
if (root != null)
    root.setKeepScreenOn(true);

我还检查了该代码是否实际执行,并且确实如此。但这并没有改变任何事情。

4

2 回答 2

2

我遇到了同样的问题,我在我的项目中使用了一个活动,而所有其他屏幕都是片段,然后我使用了android:keepScreenOn="true"主要活动。

请尝试使用它,如果你没有得到你想要的结果,请告诉我。

谢谢。

于 2014-09-26T17:08:26.117 回答
1

在我的应用程序中真正有效的唯一解决方案是主应用程序类中的 WakeLock。不幸的是 SCREEN_BRIGHT_WAKE_LOCK 标志已被弃用!

public class MyApp extends Application {
    PowerManager.WakeLock screenOnWakeLock;
    @Override
    public void onCreate() {
        super.onCreate();
        PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
        wakeLock =  powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK,"ScreenlockTag");
        wakeLock.acquire();
    }

    @Override
    public void onTerminate()
    {
        if (screenOnWakeLock != null && screenOnWakeLock.isHeld())
            screenOnWakeLock.release();
        super.onTerminate();
    }
}
于 2015-09-11T07:51:35.580 回答