2017-06-28 28 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