如何防止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); }