如何将屏幕保持在我的应用程序中?

问题描述:

对于我的Android应用程序,我从不希望手机锁定或背光灯关闭如何将屏幕保持在我的应用程序中?

+11

有在这个岗位更好的解决方案做到这一点: 的http://计算器。 com/questions/4807634/disable-keep-screen-on – Derzu 2012-02-25 05:01:20

+0

http://*.com/a/16015358/1318946 – 2013-09-11 13:32:05

使用PowerManager.WakeLock类序执行此。 请看下面的代码:

import android.os.PowerManager; 

public class MyActivity extends Activity { 

    protected PowerManager.WakeLock mWakeLock; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(final Bundle icicle) { 
     setContentView(R.layout.main); 

     /* This code together with the one in onDestroy() 
     * will make the screen be always on until this Activity gets destroyed. */ 
     final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
     this.mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag"); 
     this.mWakeLock.acquire(); 
    } 

    @Override 
    public void onDestroy() { 
     this.mWakeLock.release(); 
     super.onDestroy(); 
    } 
} 

使用清单文件的follwing权限:

<uses-permission android:name="android.permission.WAKE_LOCK" /> 

希望这将解决您的问题... :)

+25

不应该在'onResuem'和'onPause'这样的应用程序不会保持屏幕当用户点击主页按钮? – 2011-09-23 03:29:50

+0

PowerManager pm是否必须声明为final? – 2012-10-31 00:53:22

+0

对于@SethHikari提出的问题不太好的建议。太多的工作,消耗太多的CPU功耗。 – Ewoks 2013-06-19 13:18:18

您需要使用Power Manager才能在应用程序中获取唤醒锁。

最可能的是你有兴趣在一个FULL_WAKE_LOCK

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag"); 
wl.acquire(); 
.... 
wl.release(); 

看一看这个讨论Force Screen On

hackbod有一个很好的答案。

+2

同意。请不要使用唤醒锁。漂亮请! – Grimmace 2012-10-08 15:31:14

您可以简单地使用View类中的setKeepScreenOn()

添加的setContentView()中的onCreate(后)一行代码

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_flag); 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
} 
+3

这个答案是每个活动,如果你不想让应用程序唤醒CPU,因为你没有正确管理唤醒锁,那么这个答案会更好。 – Ewoks 2013-06-19 13:19:08

+1

那么你如何关闭这个标志呢? – 2013-12-29 13:03:22

+21

@kilaka用'getWindow()。clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)''关闭它。 – anthonycr 2014-01-04 00:48:21

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

getWindow是活动定义的方法,而不会要求你找到一个View第一。

+0

与@ hackbod的解决方案相同:http://*.com/a/2134602/435605 – 2013-12-29 13:16:18

+0

谢谢@kilaka :) – 2013-12-30 05:13:54

很多答案已经存在!我正在用附加的和可靠的解决方案回答这个问题:

使用PowerManager.WakeLock不是一个可靠的解决方案,因为该应用程序需要额外的权限。

<uses-permission android:name="android.permission.WAKE_LOCK" /> 

此外,如果它意外地保持唤醒锁,它可以离开屏幕。

因此,我建议不要使用PowerManager.WakeLock解决方案。取而代之的是,使用任何以下解决方案:

第一:

我们可以在onCreate()

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

第二次使用getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

我们可以使用keepScreenOn

1。实施Java代码使用setKeepScreenOn()

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     View v = getLayoutInflater().inflate(R.layout.driver_home, null);// or any View (incase generated programmatically) 
     v.setKeepScreenOn(true); 
     setContentView(v); 
     } 

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

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

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

注释(一些有用的点S):

  1. 这不要紧,keepScreenOn应该在主/根/父视图中使用。它可以与任何子视图一起使用,并且将以与父视图相同的方式工作。
  2. 唯一重要的是视图的可见性必须可见。否则,它不会工作!
+1

是的,它应该是正确的答案!我正在寻找一个实施“keepScreeOn”(我认为这是实现这个目标的最佳方法)的例子,这是唯一能够很好地展示它的答案! – 2014-01-23 19:29:51

+0

不需要该权限。 – mhdjazmati 2017-01-11 14:10:53

+0

v.setKeepScreenOn(true);精彩的M sdk手机上的作品,没有检查Ls的' – CodeToLife 2017-02-12 16:05:56

请勿使用唤醒锁。

It requires permission and other stuff and may cause error if you forget to set it in right time. 

最简单的方法是,当你要保持你的屏幕上使用下面的代码..

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

任一方式,如果你想删除或终止keep_Screen_on

答案
getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

你还可以看到here ..

the best and easiest way ..在活动的布局根目录中使用android:keepScreenOn="true"可以在没有额外代码的情况下执行相同的操作。但是,它仍将它Keep_Scree_on国..

它可以在你的需求See here

+0

工程很棒。我还清除了onStop中的标志,因此屏幕上的状态在我的应用程序外部像往常一样运行。出于某种奇怪的原因,它似乎没有这样做,但似乎是正确的方式来做它无论如何,以确保我会离开它(也​​许它不同于其他手机比我的Nexus 5)。 – riper 2015-01-06 14:39:26

在你想保留在屏幕上是最好的选择活动(一个或多个)的XML添加android:keepScreenOn="true"被改变。将该行添加到活动的主布局。

像这样的事情

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:keepScreenOn="true" 
    android:orientation="vertical" 
    tools:context="${relativePackage}.${activityClass}" > 

... 

</LinearLayout> 
+0

适合我,thx。 – 2015-12-03 18:51:22

此时方法

final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
     this.mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag"); 
     this.mWakeLock.acquire(); 

已被弃用。

您应该使用 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

<uses-permission android:name="android.permission.WAKE_LOCK" /> 

必须有,如果你想将其设置为

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

我测试过了,但是权限不是必需的。 – 2015-06-19 07:44:09

+0

你是完全正确的,我的错误忘记清理/重建项目,同时测试... – Proxytype 2015-06-19 21:22:01

无需添加权限和做花样。只需在主布局中使用以下文本即可。

android:keepScreenOn="true" 

尝试这个我们可以做到多种方式在那些

解决方法1:

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

溶液2:

在activity_main.xml中文件

只需添加

<android:KeepScreenOn="true"/> 

我的建议是请不要使用WakeLock,如果你使用这个,你将会定义额外的许可 ,而且这个东西大多在cpu的开发环境中很有用。

,并确保在关闭活动

关闭屏幕,您可以通过这种方式

pubic void onDestry(){ 
    getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

    } 
+1

有这样的建议/答案已经存在 – user7294900 2017-07-23 06:39:28