防止应用程序/屏幕超时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的主要内容,如果未能解决你的问题,请参考以下文章

如何重置屏幕超时android?

防止在关闭屏幕时重新创建 Android 活动

如何防止在 Android 应用程序中录制屏幕视频?

如何在 Android 应用程序中维护会话超时处理

打开相机意图时如何防止android应用程序方向

Android:如何防止打开物理键盘重新启动应用程序[重复]