Answers:
一种选择是使用唤醒锁。来自文档的示例:
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();
此页面上还有一个表格,描述了不同类型的唤醒锁。
请注意,使用唤醒锁时需要格外小心。release()完成锁定后,请确保始终保持锁定(或不在前台)。否则,您的应用程序可能会导致严重的电池消耗和CPU使用率。
该文档还包含一个有用的页面,该页面描述了使设备保持清醒的不同方法以及何时选择使用哪种方法。如果“防止设备进入睡眠状态”仅是指屏幕(而不是保持CPU处于活动状态),则唤醒锁定可能超出您的需要。
您还需要确保在清单中设置了WAKE_LOCK权限才能使用此方法。
如果您只想阻止特定的睡眠模式View,则只需调用setKeepScreenOn(true)它View或将keepScreenOn属性设置为即可true。这样可以防止屏幕上显示时关闭View屏幕。无需特殊许可。
setKeepScreenOn(true)只有在View可见时,才会生效。
我找到了另一个可行的解决方案:在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");
}
}
在那之后,我的应用程序在打开时不会进入睡眠状态。感谢您对xSus的答复。
android:keepScreenOn="true" 布局XML可能是更好的选择。
更多信息:https://developer.android.com/training/scheduling/wakelock.html
在根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/
@eldarerathis所说的所有方面都是正确的,唤醒锁是使设备保持睡眠状态的正确方法。
我不知道您的应用程序需要做什么,但真正重要的是考虑一下如何设计应用程序,以免强迫手机保持清醒状态,以免消耗更多电量,否则电池寿命将遭受巨大损失。
我将向您指出这个非常好的示例,该示例说明如何使用AlarmManager事件触发事件,唤醒电话以及(您的应用)执行您需要执行的操作,然后再次进入睡眠状态:警报管理器(来源:commonsware.com)