【问题标题】:Force Screen On强制屏幕开启
【发布时间】:2010-01-25 11:42:02
【问题描述】:

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

【问题讨论】:

标签: android


【解决方案1】:

请不要使用唤醒锁

这需要您为您的应用授予额外的权限,并且很容易引入错误,导致您不小心保持唤醒锁定并因此保持屏幕开启。

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

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

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

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

【讨论】:

  • 这会阻止设备休眠吗?如果是这样,WAKE_LOCK 的普遍性让我觉得这是一个令人震惊的错误!
  • 是的,它使屏幕保持打开状态并防止设备进入睡眠状态。
  • 是的,您可以使用适当的窗口 API 删除该标志。您无需担心会导致绘制任何内容,框架会在需要时执行此操作。
  • @KC202 您可以使用 WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON 在显示窗口时打开屏幕。也经常与 FLAG_DISMISS_KEYGUARD 和/或 FLAG_SHOW_WHEN_LOCKED 一起使用。
  • Mobile n00b 在这里做一些 PhoneGap 工作:这个答案对我有用,但只有在我将以下两行添加到我的应用程序的主 Java 文件之后:import android.view.WindowManager; import android.view.Window; 默认情况下它们不在其中。希望它可以帮助某人。
【解决方案2】:

@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.将keepScreenOn添加到xml 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. 在Main/Root/Parent View 上使用keepScreenOn 没关系它可以与任何child view 一起使用将与@987654334 一样工作@

2. 唯一重要的是 View's Visibility must be visible 否则它将无法正常工作!

【讨论】:

  • note v.setKeepScreenOn(true); 似乎是全屏对话框片段的唯一方法
【解决方案3】:

另一种解决方案是将android:keepScreenOn="true" (documentation) 添加到需要保持屏幕开启的视图中。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 2010-10-11
    • 2014-05-18
    相关资源
    最近更新 更多