防止应用程序/屏幕超时 Android

6

我有一个Android(1.5版本)应用程序,需要在按下按钮时不断运行。因此,当按下Button时,我希望手机保持开启状态,不想让屏幕或CPU超时。

当按下另一个Button时,我希望手机恢复正常,并根据用户设置进行超时。


可能是重复的问题:强制屏幕常亮 - Richard Ev
2个回答

3

更新:正如Steve Pomeroy建议的那样,this可能是更好的方法。


你可以使用一个需要以下权限的 WakeLock

<uses-permission android:name="android.permission.WAKE_LOCK" />

这是如何获取和释放WakeLock的方法:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");
wl.acquire();
// wake locked...
wl.release();

根据您的需求,您可能需要使用不同类型的WakeLock


我确实考虑过那个解决方案,但我只能在本地创建的位置释放唤醒锁,而不能在“关闭”按钮中释放它。有什么想法吗? - Tom
2
创建一个服务。在服务的onCreate()中,获取保存在私有数据成员中的WakeLock。在服务的onDestroy()中释放WakeLock。在活动中,当您需要屏幕/CPU保持开启时,请调用startService()。稍后,当您不再需要屏幕/CPU保持开启时,请调用stopService()。现在,只要服务正在运行,WakeLock就会被保持,无论您的活动发生了什么。此外,该服务还可以监视电池事件,以便在电池寿命变低时释放WakeLock。 - CommonsWare
我一直在 .release 方法上收到“wl 无法解析”的问题:public class WakeLockService extends Service { @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null; } public void onCreate() { PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag"); wl.acquire(); } public void onDestroy() { wl.release(); }} - Tom
哦,天啊...服务比那复杂多了。看看这个指南:http://developer.android.com/guide/developing/tools/aidl.html - Jeremy Logan
请注意:唤醒锁可能会带来危险,只有在真正需要时才应使用。 - Steve Pomeroy
1
我认为在这里你确实需要唤醒锁定,因为它是用于在Activity内按下按钮时进行控制,而不是整个Activity(前台)的生命周期。 - Christopher Orr

2

不要使用wakelock,你应该考虑使用这里提出的解决方案:强制屏幕常亮

它更容易使用,而且不会意外浪费用户的电池。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接