0

我正嘗試在我的應用程序中使用地理柵欄。 到目前爲止,我已經成功了,並且它在前臺應用程序爲 時可以很好地工作。 我正在使用Android模擬器進行檢查,其中包含谷歌播放服務。 要檢查這個我設置的位置參數,正如我所說的 它應用程序在前臺時正常工作。當應用程序在後臺時不會觸發地理柵欄過渡

但是當應用程序在後臺時,似乎不會觸發轉換 ,直到我打開應用程序或打開Goog​​le地圖應用程序。

所以我試圖用的,而不是IntentService 廣播接收器,我已經註冊的BroadcastReceiver清單文件 像這樣:

<receiver android:name  = ".GeofenceReceiver" 
      android:exported = "true" 
      android:enabled = "true" 
/> 

但我仍然有同樣的結果..

那麼如何在應用程序在後臺時觸發Geofence轉換?

我想過在Service中使用LocationServices.FusedLocationApi.requestLocationUpdates。因此,採用這種方法,我的應用程序將要求提供位置 更新,這可能會觸發地理圍欄轉換。

但它可能會消耗電池,這是一個不好的做法。 那麼,有沒有其他的選擇?

回答

1

好的。 所以它似乎是由於電池問題導致的新的Android O背景限制。 在Android 8中,他們有關於後臺進程(服務等)的「新規則」,以減少電池消耗。 在Android 8中,當應用程序不在前臺(即用戶按下主頁按鈕)時,即使您的服務是後臺服務,您的服務也可能會被終止,前提是您的應用程序沒有任何與前臺相關的組件。

如果您的設備系統是Android 7並且您的應用程序已針對Android 7及更低版本,那麼一切正常。

關於位置更新,爲了節省電池消耗,更新將在每小時發生幾次。

他們建議使用前臺服務,這樣你的應用程序仍然會被視爲前臺。

see this link

相關問題