以打盹模式启动前台服务
Posted
技术标签:
【中文标题】以打盹模式启动前台服务【英文标题】:Starting foreground service in doze mode 【发布时间】:2017-08-06 13:31:13 【问题描述】:我正在开发一个通过 wifi 连接到特殊设备的应用程序。我需要在短时间内进行状态更新,分别。使我的特殊设备在应用程序中的状态保持最新。 FCM 不是一种选择。我的想法是给用户两个选择:使用前台服务的快速更新或使用定期更新机制的“慢速”更新以节省电池。
我的问题是关于第二个选项。间隔应该在五分钟左右。因此无法使用JobScheduler
。但即使使用AlarmManager
似乎也不是一种选择,因为在打瞌睡维护窗口期间我无法获得网络访问权限。
我考虑使用WakefulBroadcastReceiver
来接收AlarmManager
的Intent
,需要WakeLock
并通过调用startForeground()
将我长期运行的Service
变为前台。但是,只要设备处于打盹模式,startForeground()
方法似乎对Service
没有影响。
我阅读了很多关于打瞌睡和服务的页面,但不知道如何解决我的问题...有人知道吗?
【问题讨论】:
唯一可以真正将设备从打盹中唤醒的是 FCM 消息,除此之外,我认为您真的没有任何选择可以做您想做的事,除非您想告诉所有用户排除您的应用处于打盹模式 【参考方案1】:您应该使用GcmTaskService。您可以为您的操作安排一些时间间隔,即使在打瞌睡模式下也能正常工作,请通过链接查看更多信息
【讨论】:
谢谢!以前没见过这个。不错的解决方案! 对于其他对此感兴趣的人:Here 是一个很棒的教程 通过使用 GcmTaskService,我可以让我的应用始终连接互联网以确保应用不会丢失通知吗? @kavie 不,gcm 只会在特殊的时间段内执行。为了接收通知,您可以使用push notifications 我正在使用第三方服务器在我的 android wear 应用中接收通知。有没有办法让我的应用在 android 设备进入打盹模式时不会丢失通知? (* 我现在不能使用 FCM)【参考方案2】:您可以使用 setAlarmClock,但不建议您使用它。 相反,您可以使用 setExactAndAllowWhileIdle 手动重新编程,间隔为 15 分钟。 最佳方式:GCM。
【讨论】:
以上是关于以打盹模式启动前台服务的主要内容,如果未能解决你的问题,请参考以下文章