2017-06-28 29 views
2

我有一个需要获取单个位置更新的前台服务。在Android中打盹模式下未收到位置更新的前台服务O

它是由一个特定的广播开始的,一开始它只是在我们的后端做请求。当它接收到另一个广播时,它会请求位置更新(一次),执行另一个后端请求,然后自行停止。

编辑:为了澄清,服务本身执行位置更新和后端请求。它在这方面与主应用程序无关。

无论手机处于清醒状态还是打盹模式,此功能都适用于棒棒糖和棉花糖。但出于某种原因,在Android O上,服务在打盹模式下从不会获取位置更新。第一次请求在两种情况下都可以正常工作,网络正常工作。另外,如果在位置请求运行时唤醒电话,它将获得更新。如果我把它放在维护窗口中也一样。

Android O确实在background location上引入了一些限制,但随着页面的提及,应该保留前台应用程序行为(应用程序可见或前台服务正在运行)并且与以前版本的Android类似。

这是开发者预览版中的问题还是我错过的限制?

+0

只是为了澄清,都从服务所取得的网络请求和位置更新请求? – Noel

+0

@Nelel是的。它与应用程序无关 – Jukurrpa

回答

0

看看LocationUpdatesForegroundService示例:Code Samples for Android O,也许你做错了什么。

LocationUpdatesForegroundService样本 - 介绍如何使用 前台服务来获得位置更新时,应用程序活动 不可见。对于在Android O上运行的应用程序(甚至是目标为 Android 7.0(API级别24)或更低的应用程序),后台更新限制为 ,但每小时只能执行几次。使用前台服务是一种接收更频繁更新的方法。

得到它在GitHub上:Java

+0

我使用的是PendingIntent(当我的服务是后台服务时,剩下的部分),我用“LocationCallback”和服务的“Looper”替换它们,但它没有解决问题。 – Jukurrpa

+0

我测试了代码示例,它**不起作用(设备进入休眠状态时没有位置更新)**。 任何人都可以使用adb强制打盹并对其进行测试。 ADB命令是 'adb shell dumpsys battery unplug'和 'adb shell dumpsys deviceidle force-idle' – VishalKale

+0

正在运行前台服务(及相关通知)的应用程序不受打盹的限制。 – phnmnn