【问题标题】:Allowing the phone to sleep while using RTC alarm on Android在 Android 上使用 RTC 闹钟时允许手机进入睡眠状态
【发布时间】:2011-05-24 14:47:57
【问题描述】:

我在 Android 中使用警报管理器时遇到了一些奇怪的问题,尽管我使用的是 RTC(非唤醒),但手机会以正确的重复间隔可靠地发送 PendingIntent。

我的测试详情

  • 设备没有充电,只是在我睡觉时坐在床头柜上
  • 我的服务每次都在重复间隔(30 分钟,我知道的极端情况)唤醒
  • 该服务将其活动记录在一个文件中,以便我可以在早上阅读它

现在据我了解,除非我将其唤醒,否则手机应该处于睡眠状态,并且在手机唤醒之前不应发送我的闹钟。

  • 为什么我的服务正在执行?
  • 如果另一个服务行为不端并使用警报的 _WAKEUP 变体,我的服务也会唤醒吗?
  • 我能否避免被其他服务唤醒,而只是从用户打开屏幕时唤醒?

【问题讨论】:

    标签: android alarmmanager


    【解决方案1】:

    为什么我的服务会执行?

    大概是其他东西让设备在那些时刻处于唤醒状态。

    如果另一个服务行为不端并使用警报的 _WAKEUP 变体,我的服务也会唤醒吗?

    是的,尽管旁观者认为“行为不端”。

    我能否避免被其他服务唤醒,而只是从用户打开屏幕时唤醒?

    不是直接通过AlarmManager。您可以观看ACTION_SCREEN_OFFACTION_USER_PRESENT 广播,也可以禁用它们之间的警报。

    【讨论】:

    • 这两个广播的限制是什么?正如您在错误报告code.google.com/p/android/issues/detail?id=10735 中指出的那样,它们无法在清单中注册。这对于一项活动来说很好,但是因为我正在处理一项服务,所以它们基本上是无用的,并且会在服务终止时被释放(对于 IntentService 来说很快)。广播也没有粘性,所以我不能随意查询它们。我错过了什么吗?我可以从我的 IntentService 中创建一个长寿的 BroadcastReceiver 吗?
    • @smith324:“正如您在错误报告 code.google.com/p/android/issues/detail?id=10735 中指出的那样,它们无法在清单中注册。” ——嗯,是的,没错。抱歉,忘记了。 :-( “我可以从我的 IntentService 中创建一个长寿的 BroadcastReceiver 吗?” -- IntentService 并非设计为“长寿”的。
    • 好吧,我想我可以创建另一个服务来监听屏幕的开/关,但这感觉就像是在浪费资源:\
    • @smith324:我所知道的最接近按需检查的是inKeyguardRestrictedInputMode() on KeyguardManager
    • 谢谢你,这似乎是我需要的。
    【解决方案2】:

    我刚刚花了一个小时试图找出为什么我的 RTC 闹钟即使在我的手机处于睡眠状态时也会发送 PendingIntents。答案也很简单,因为是插USB的,所以手机的状态是“正在充电”。

    大概是别的东西让设备在这些时候处于唤醒状态 时刻。

    许多带有通知广告的应用程序(如 AirPush、Leadbolt 等)会唤醒设备。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多