防止应用程序/屏幕超时Android
Posted
技术标签:
【中文标题】防止应用程序/屏幕超时Android【英文标题】:Preventing application/screen timeout Android 【发布时间】:2010-11-02 17:53:40 【问题描述】:我有一个 android(1.5 版)应用程序需要在按下按钮时持续运行。因此,当按下 Button
时,我希望手机保持开机状态,而不希望屏幕或 CPU 超时。
当按下另一个Button
时,我希望手机恢复正常并根据用户设置超时。
【问题讨论】:
Force Screen On的可能重复 【参考方案1】:更新:正如 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
。
【讨论】:
我确实想到了那个解决方案,但是我只能在本地创建它的地方释放唤醒锁,而不是在需要释放它的“关闭”按钮中。想法? 创建服务。在服务的 onCreate() 中,获取保存在私有数据成员中的 WakeLock。在服务的 onDestroy() 中,释放 WakeLock。在活动中,当您需要屏幕/CPU 保持开启时,调用 startService()。稍后,当您不再需要屏幕/CPU 保持开启时,调用 stopService()。现在,只要服务正在运行,无论您的活动发生什么,WakeLock 都会保持。此外,该服务还可以监视电池事件,以便在电池寿命不足时释放 WakeLock。 我在 .release 方法上不断收到“wl 无法解决”: public class WakeLockService extends Service @Override public IBinder onBind(Intent arg0) // TODO 自动生成的方法存根 return null ; public void onCreate() PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "我的标签"); wl.acquire(); 公共无效 onDestroy() wl.release(); 哦,伙计...服务远比这复杂。查看指南:developer.android.com/guide/developing/tools/aidl.html 我认为你确实需要唤醒锁,因为它是在按下 Activity 中的按钮时进行控制的,而不是在整个 Activity 的(前台)生命周期内进行控制。 【参考方案2】:您应该考虑这里提出的解决方案,而不是使用唤醒锁:Force Screen On
它更易于使用,并且不会意外浪费用户的电池。
【讨论】:
以上是关于防止应用程序/屏幕超时Android的主要内容,如果未能解决你的问题,请参考以下文章