在Doze模式下启动前台服务

3
我正在开发一款通过WiFi连接到特殊设备的应用程序。我需要在短时间内进行状态更新,或者保持应用程序中特殊设备的状态最新。FCM不是一个选项。我的想法是给用户两个选项:使用前台服务进行快速更新,或者使用定期更新机制进行“慢速”更新以节省电池电量。
我的问题与第二个选项有关。间隔应该大约为五分钟。因此,使用JobScheduler不可行。但即使使用AlarmManager似乎也不是一个选择,因为我无法在维护窗口期间获得网络访问权。
我考虑使用WakefulBroadcastReceiver通过AlarmManager接收Intent,需要WakeLock,并通过调用startForeground()将我的长时间运行的服务转换为前台。但似乎只要设备处于doze模式下,startForeground()方法对Service没有影响。
我阅读了很多关于doze和服务的页面,但不知道如何解决我的问题...有人有想法吗?

唯一能够真正唤醒设备的是FCM消息,除此之外,我认为你没有任何选项可以做到你想要的,除非你想告诉所有用户将你的应用从待机模式中排除。 - tyczj
2个回答

2
你应该使用GcmTaskService。你可以为你的操作安排一些间隔,即使在doze模式下也可以正常工作,通过链接查看更多信息。

谢谢!我以前没见过这个。很棒的解决方案! - bartolja
1
对于其他人感兴趣的:这里有一篇很棒的教程。 - bartolja
通过使用GcmTaskService,我可以让我的应用程序始终连接到互联网,以确保应用程序不会丢失通知吗? - kavie
@kavie 不,GCM 仅在特定时间段执行。为了接收通知,您可以使用推送通知 - A. Shevchuk
我正在使用第三方服务器在我的Android Wear应用程序中接收通知。有没有办法让我的应用程序在Android设备进入Doze模式时不丢失通知?(*现在我不能使用FCM) - kavie

0

你可以使用setAlarmClock,但不建议用于你的目的。 相反,你可以使用setExactAndAllowWhileIdle,并手动重新编程为15分钟的间隔。 最好的方法:GCM。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接