强制屏幕

bug*_*gzy 109 android

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

hac*_*bod 331

请不要使用唤醒锁

这要求您为应用程序提供额外的权限,并且很容易引入错误,因为您不小心保持唤醒锁定,从而使屏幕保持打开状态.

使用窗口标志要好得多FLAG_KEEP_SCREEN_ON,你可以在你的活动窗口中启用,onCreate()如下所示:

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

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
Run Code Online (Sandbox Code Playgroud)

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

  • 是的,它会保持屏幕开启并防止设备进入睡眠状态. (32认同)
  • 这会阻止设备睡觉吗?如果是这样,WAKE_LOCK的共性让我感到震惊! (5认同)
  • @ KC202您可以使用WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON在显示窗口时打开屏幕.也经常与FLAG_DISMISS_KEYGUARD和/或FLAG_SHOW_WHEN_LOCKED一起使用. (5认同)
  • Mobile n00b 在这里做了一些 PhoneGap 工作:这个答案对我有用,但只有在我将以下两行添加到我的应用程序的主 Java 文件中之后:import android.view.Window;` 默认情况下它们不在那里。希望它能帮助某人。 (2认同)

Tar*_*ngh 32

这个问题已经由@hackbod做出了很好的答案!

我正在用两个额外的解决方案回答这个问题!

现有解决方案

@Override
    protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);    
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    }
Run Code Online (Sandbox Code Playgroud)

其他方案:

我们可以用 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);
       }
Run Code Online (Sandbox Code Playgroud)

文档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" >
Run Code Online (Sandbox Code Playgroud)

文档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其他方面它将无法运作!


Ale*_*mov 16

另一种解决方案是向需要保持屏幕的视图添加android:keepScreenOn="true"(文档).

允许在哪些视图保持不变的情况下进行更细粒度的控制.您甚至可以通过这种方式从资源文件中引用设置.