【问题标题】:Preventing application/screen timeout Android防止应用程序/屏幕超时Android
【发布时间】:2010-11-02 17:53:40
【问题描述】:

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

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

【问题讨论】:

标签: android android-1.5-cupcake


【解决方案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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多