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

Jam*_*mes 147 android

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

Wit*_*tek 229

如果您只想阻止特定的睡眠模式View,只需调用setKeepScreenOn(true)View或将keepScreenOn属性设置为true.这将阻止屏幕在屏幕上时关闭View.没有特别许可.

  • 此外,这不会强制手机在应用程序的使用寿命期内保持清醒状态.你可以用WakeLock来解决这个问题. (17认同)
  • 这应该是选定的答案.简单,干净,就像Android一样.谢谢. (7认同)
  • 这可以在不需要WAKE_LOCK权限的情况下工作. (3认同)
  • 是的,在大多数情况下,这是更好的方法. (2认同)
  • “使用android:keepScreenOn =“ true”等同于使用FLAG_KEEP_SCREEN_ON。您可以使用最适合您的应用的方法。在活动中以编程方式设置标志的好处是,您可以选择以后以编程方式清除标志,从而允许屏幕关闭”-https://developer.android.com/training/scheduling/wakelock.html (2认同)

eld*_*his 131

一种选择是使用唤醒锁.来自文档的示例:

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();
Run Code Online (Sandbox Code Playgroud)

此页面上还有一个表格,描述了不同类型的唤醒锁.

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

该文档还包含一个有用的页面,描述了保持设备唤醒的不同方法,以及何时可以选择使用一个.如果"防止设备进入休眠状态"仅指屏幕(并且不保持CPU处于活动状态),则唤醒锁定可能超出您的需要.

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

  • 您不应再使用此方法,因为此方法现已弃用.看看其他答案之一. (19认同)
  • 使用唤醒锁仍然有一些原因,例如,如果设备专用于特定的应用程序,并且即使在最小化时也需要运行. (4认同)
  • 不推荐使用PowerManager.PARTIAL_WAKE_LOCK,我认为这是最有效的方法.它允许用户按下电源按钮,但CPU仍然会打开,直到用户调用release(); (2认同)

dog*_*nic 113

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

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

我的示例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");
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 我认为这是最好的选择... +1 (2认同)

CoD*_*oDe 23

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

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


arj*_*jun 12

在Activity的窗口上设置标志如下

@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);
}
Run Code Online (Sandbox Code Playgroud)


jel*_*oks 6

从root shell(例如adb shell),你可以锁定:

echo mylockname >/sys/power/wake_lock    
Run Code Online (Sandbox Code Playgroud)

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

echo mylockname >/sys/power/wake_unlock    
Run Code Online (Sandbox Code Playgroud)

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

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

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

参考资料如下:http://lwn.net/Articles/479841/