如何防止Android设备以编程方式进入睡眠状态?
如何防止Android设备以编程方式进入睡眠状态?
一种select是使用唤醒锁 。 来自文档的示例:
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();
这个页面上还有一个表格,描述了不同types的唤醒锁。
请注意,使用唤醒锁时需要谨慎。 确保你完成后release()
锁(或不在前台)。 否则,你的应用程序可能会导致一些严重的电池消耗和CPU使用。
该文档还包含一个有用的页面 ,描述了保持设备清醒的不同方法,以及何时可以select使用。 如果“防止设备进入睡眠状态”只是指屏幕 (而不是保持CPU活动),那么唤醒锁可能比您需要的更多。
您还需要确保在清单中设置了WAKE_LOCK权限才能使用此方法。
如果您只想阻止特定View
的睡眠模式,只需在该View
上调用setKeepScreenOn(true)
或将keepScreenOn
属性设置为true
。 这将防止屏幕在屏幕上显示时出现。 这不需要特别许可。
我发现了另一个工作解决scheme:在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更好的select。
更多信息: https : //developer.android.com/training/scheduling/wakelock.html
从根shell(例如adb shell),你可以locking:
echo mylockname >/sys/power/wake_lock
之后,设备将保持清醒,直到你做到:
echo mylockname >/sys/power/wake_unlock
与“mylockname”相同的string。
请注意,这不会阻止屏幕变黑,但会阻止CPUhibernate。
请注意,/ sys / power / wake_lock对于用户无线电(1001)和组系统(1000)是可读写的,当然还有root用户。
参考在这里: http : //lwn.net/Articles/479841/
什么@eldarerathis说在所有方面是正确的,唤醒locking是保持设备进入睡眠的正确方法。
我不知道你的应用程序需要做什么,但是如何构build你的应用程序是非常重要的 ,这样你就不会迫使手机保持清醒状态,否则电池寿命将会受到极大的影响。
我会告诉你这个关于如何使用AlarmManager
来触发事件,唤醒电话和(你的应用程序)来执行你需要做的事情然后再次进入睡眠状态的很好的例子 : Alarm Manager(source:commonsware.com)
在“活动窗口”中设置标志如下
@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); }