强制屏幕打开


Answers:


339

请不要使用唤醒锁

这要求您为您的应用授予额外的权限,并且很容易在不小心保持唤醒锁并导致屏幕保持打开的状态下引入错误。

最好使用window标志FLAG_KEEP_SCREEN_ON,您可以onCreate()像这样在活动的窗口上启用它:

@Override
protected void onCreate(Bundle icicle) {
    super.onCreate(icicle);

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

这样可以确保在窗口位于前景中时(且仅在其处于前景中时)屏幕保持打开状态。它极大地简化了这种常见用例,消除了在应用程序在状态之间转换时您需要做的任何事情。


5
这样可以防止设备进入休眠状态吗?如果是这样,WAKE_LOCK的普遍性让我震惊,这是一个令人震惊的错误!
Michael Cramer 2010年

32
是的,它可以保持屏幕打开并防止设备进入休眠状态。
hackbod 2010年

1
是的,您可以使用相应的窗口API删除该标志。您无需担心会导致绘制任何东西,如果需要,框架会这样做。
hackbod 2010年

1
@hakbod:这可以使屏幕保持活动状态,但是处于休眠状态的屏幕又如何唤醒它并保持其活动状态呢?
卡维萨

5
@ KC202,您可以使用WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON在显示窗口时打开屏幕。也经常与FLAG_DISMISS_KEYGUARD和/或FLAG_SHOW_WHEN_LOCKED一起使用。
hackbod 2011年

34

该问题已经由@hackbod很好回答了!

我用两个其他解决方案来回答这个问题!

现有解决方案:

@Override
    protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);    
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    }

其他解决方案:

我们可以用 keepScreenOn

1. implementation使用setKeepScreenOn() in java code

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // or any View (in case generated programmatically ) 
        View v = getLayoutInflater().inflate(R.layout.driver_home, null);

        v.setKeepScreenOn(true);
        setContentView(v);
       }

文件http://developer.android.com/reference/android/view/View.html#setKeepScreenOn(boolean)

2.添加keepScreenOnxml layout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:keepScreenOn="true" >

文件http://developer.android.com/reference/android/view/View.html#attr_android%3akeepScreenOn

注意(一些有用的观点):

1.这不要紧,keepScreenOn就应该使用Main/Root/Parent View 它可以与任何使用child view将作为相同的,因为它在工作Parent view

2.唯一的问题是,View's Visibility must be visible其他方法将不起作用!


注意v.setKeepScreenOn(true);似乎是全屏对话框片段的唯一方法
蒂姆(Tim)

16

另一种解决方案是增加android:keepScreenOn="true"文档需要保持屏幕打开的视图中)。

允许对哪些视图保持打开和哪些不保持进行更细化的控制。您甚至可以通过这种方式从资源文件中引用设置。

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.