如何防止Android设备以编程方式进入睡眠状态?

时间:2010-09-16 04:06:57

标签: android

如何阻止Android设备以编程方式进入睡眠状态?

8 个答案:

答案 0 :(得分:222)

如果您只想阻止特定View上的睡眠模式,只需致电View上的setKeepScreenOn(true)或将keepScreenOn属性设置为true 。这样可以防止在View出现在屏幕上时屏幕熄灭。没有特别许可。

答案 1 :(得分:129)

一种选择是使用wake lock。来自文档的示例:

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

// screen and CPU will stay awake during this section

wl.release();

this page上还有一张表格,描述了不同类型的唤醒锁。

请注意,使用唤醒锁时需要注意一些事项。确保在完成锁定(或不在前台)时始终release()锁定。否则,您的应用可能会导致严重的电池消耗和CPU使用。

该文档还包含a useful page,其中介绍了保持设备唤醒的不同方法,以及何时可以选择使用设备。如果“阻止设备进入休眠状态”仅指屏幕(并且不保持CPU处于活动状态),则唤醒锁定可能超出您的需要。

您还需要确保在清单中设置了WAKE_LOCK权限才能使用此方法。

答案 2 :(得分:109)

我找到了另一种有效的解决方案:在onCreate事件下将以下行添加到您的应用中。

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

我的示例Cordova项目如下所示:

package com.apps.demo;
import android.os.Bundle;
import android.view.WindowManager;
import org.apache.cordova.*;

public class ScanManActivity extends DroidGap {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        super.loadUrl("http://stackoverflow.com");
    }
}

之后,我的应用程序在打开时不会进入睡眠状态。感谢anwer转到xSus。

答案 3 :(得分:22)

android:keepScreenOn="true" 可能是布局XML的更好选择。

更多信息:https://developer.android.com/training/scheduling/wakelock.html

答案 4 :(得分:11)

在活动窗口中设置标志如下

@Override public void onResume() {
 super.onResume();
 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}

@Override public void onPause() {
 super.onPause();
 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}

答案 5 :(得分:5)

从root shell(例如adb shell),您可以使用以下命令锁定:

echo mylockname >/sys/power/wake_lock    

之后设备将保持清醒状态,直到您执行以下操作:

echo mylockname >/sys/power/wake_unlock    

使用'mylockname'的相同字符串。

请注意,这不会阻止屏幕变黑,但会阻止CPU休眠。

请注意/ sys / power / wake_lock对用户无线电(1001)和组系统(1000)是可读写的,当然还有root用户。

参考文献在这里:http://lwn.net/Articles/479841/

答案 6 :(得分:3)

@eldarerathis所说的在所有方面都是正确的,唤醒锁是保持设备进入睡眠状态的正确方法。

我不知道你的应用程序需要做什么,但真的很重要你会考虑如何构建你的应用程序,这样你就不会强迫手机保持清醒需要,或者电池寿命会受到很大影响。

我会指出这个非常好的例子关于如何使用AlarmManager来触发事件并唤醒手机和(你的应用)以执行你需要做的事情然后再次入睡:Alarm Manager (source: commonsware.com)

答案 7 :(得分:0)

如果您是Xamarin用户,这是解决方案:

   protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle); //always call superclass first

        this.Window.AddFlags(WindowManagerFlags.KeepScreenOn);

        LoadApplication(new App());
    }