Android 强制屏幕打开

Android 强制屏幕打开,android,Android,在我的应用程序运行时,如何强制屏幕保持活动状态而不关闭?请不要使用唤醒锁 这需要你给你的应用一个额外的权限,并且很容易在你不小心保持唤醒锁的地方引入bug,从而使屏幕保持打开状态 使用窗口标志flag\u KEEP\u SCREEN\u ON要好得多,您可以在onCreate()的活动窗口中启用该标志,如下所示: @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); getWindo

在我的应用程序运行时,如何强制屏幕保持活动状态而不关闭?

请不要使用唤醒锁 这需要你给你的应用一个额外的权限,并且很容易在你不小心保持唤醒锁的地方引入bug,从而使屏幕保持打开状态

使用窗口标志
flag\u KEEP\u SCREEN\u ON
要好得多,您可以在
onCreate()
的活动窗口中启用该标志,如下所示:

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

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

这将确保当您的窗口位于前景时屏幕保持打开状态,并且仅当窗口位于前景时屏幕保持打开状态。它极大地简化了这个常见用例,消除了应用程序在状态之间转换时需要做的任何杂耍。

另一个解决方案是将
android:keepScreenOn=“true”
()添加到需要保持屏幕打开的视图中


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

这个问题@hackbod已经给出了很好的答案

我用另外两个解决方案来回答这个问题

现有解决方案:

@Override
    protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);    
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    }
其他解决方案:

@Override
    protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);    
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    }
我们可以使用
keepScreenOn

1.
在java代码中使用
setKeepScreenOn()实现

@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);
       }
文件

2.
keepScreenOn
添加到
xml布局中

<?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" >

文件

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

1.
主/根/父视图上使用
keepScreenOn
并不重要
它可以与任何
子视图一起使用
的工作原理与在
父视图中的工作原理相同


2.唯一重要的是
视图的可见性必须是可见的
否则它将不起作用

这会阻止设备睡眠吗?如果是这样的话,唤醒锁的共性给我的印象是一个令人震惊的错误!是的,它保持屏幕打开并防止设备睡眠。是的,您可以使用适当的窗口API删除该标志。您不必担心会导致绘制任何内容,如果需要,框架会这样做。@hakbod:这可以使屏幕保持活动状态,但对于处于休眠状态的屏幕又如何呢,它会唤醒它并使其保持活动状态吗???@KC202您可以使用WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON在显示窗口时使屏幕打开。当锁定时,也经常与FLAG_Disclose_KEYGUARD和/或FLAG_SHOW_一起使用。请参阅此处的详细答案。。注
v.setKeepScreenOn(真)
似乎是全屏对话片段的唯一方法