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

时间:2011-04-19 07:13:35

标签: android

对于我的Android应用程序,我从不希望手机锁定或背光灯关闭

12 个答案:

答案 0 :(得分:209)

在onCreate()

中的setContentView()之后添加一行代码
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_flag);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}

答案 1 :(得分:113)

这里已经存在很多答案!我正在通过其他可靠的解决方案回答这个问题:

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

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

此外,如果意外地保持唤醒锁定,它可以使屏幕保持开启状态。

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

首先:

我们可以在getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

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

第二名:

我们可以使用keepScreenOn

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

1。

@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

备注(一些有用的点):

  1. {/ 1}}应该在主/根/父视图上使用并不重要。它可以与任何子视图一起使用,其工作方式与在父视图中的工作方式相同。
  2. 唯一重要的是视图的可见性必须是可见的。否则,它将无法正常工作!

答案 2 :(得分:99)

使用 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();
    }
}

使用清单文件中的以下权限:

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

希望这能解决你的问题......:)

答案 3 :(得分:46)

请勿使用唤醒锁定。

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状态..

可能因您的需求而异[{3}}

答案 4 :(得分:15)

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

getWindow是为活动定义的方法,不需要您首先找到View

答案 5 :(得分:13)

看一下这个讨论Force Screen On

hackbod有一个很好的答案。

答案 6 :(得分:10)

您只需使用View类中的setKeepScreenOn()即可。

答案 7 :(得分:7)

在要保持屏幕的活动的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>

答案 8 :(得分:4)

您需要使用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();

答案 9 :(得分:4)

有多种方法可以做到:

解决方案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的开发环境中很有用。

此外,请务必在关闭活动时关闭屏幕。你可以这样做:

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

答案 10 :(得分:1)

此时方法

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);

答案 11 :(得分:1)

无需添加权限和做技巧。只需在主布局中使用以下文字即可。

  android:keepScreenOn="true"