如何阻止Android设备以编程方式进入睡眠状态?
答案 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)
我不知道你的应用程序需要做什么,但真的很重要你会考虑如何构建你的应用程序,这样你就不会强迫手机保持清醒需要,或者电池寿命会受到很大影响。
我会指出这个非常好的例子关于如何使用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());
}