簡體   English   中英

應用程序在后台或暫停時的位置更新

[英]Location updates while app is in the background or suspended

大家好。

我正在嘗試在我的應用程序中實現重大的位置更改和區域支持。 當應用程序處於活動狀態時,接收位置更新顯然沒有問題。 我的問題是當應用程序不活動時如何處理更新。

這是我對檢測到重大位置更改或區域進入/退出時會發生什么的理解:

  • 如果應用程序在后台或暫停,iOS 在我現有的位置委托上調用 locationManager:didUpdateToLocation:fromLocation:(或 locationManager:didEnterRegion:)。
  • 如果應用程序終止,iOS 調用 application:didFinishLaunchingWithOptions: 在我的應用程序委托上使用鍵 UIApplicationLaunchOptionsLocationKey。 此時我需要創建一個新的位置管理器實例來獲取新的位置。

這個對嗎? 我錯過了什么嗎?

感謝幫助。

問候,--約翰

你說對了一部分。

如果應用程序在后台,並且您正在使用重大的位置更改:

  1. 該應用程序將調用 locationManager:locationDidUpdateToLocation:fromLocation
  2. 如果應用程序在后台崩潰,它將使用 UIApplicationLaunchOptionLocationKey 調用 application:didFinishLaunchingWithOption:。 然后,您必須再次初始化位置管理器才能獲得顯着的位置更改。 然后這將進入 locationManager:locationDidUpdateToLocation:fromLocation。 這一步很重要

如果應用程序在后台,並且您正在使用區域監控

  1. locationManager:locationDidUpdateToLocation:fromLocation 不會被調用
  2. 該應用程序調用 locationManager:didEnterRegion:

在應用程序處於后台時與應用程序暫停時獲取位置更新是兩種截然不同的情況。 您將不得不以不同的方式處理它們。

如果您的locationManager使用方法startMonitoringSignificantLocationChanges ,則只能使用鍵UIApplicationLaunchOptionsLocationKey ,您不能使用startUpdatingLocation

獲取位置更新時

A) 該應用程序在后台,請參閱: Background Location Services not working in iOS 7

B) 應用程序已暫停/終止,請參閱: 即使應用程序已暫停,如何獲取 iOS 7 和 8 的位置更新

我寫了 2 篇很長的文章,解釋了這兩種情況之間的區別。 GitHub 上也提供上述 2 個場景的源代碼。

我相信它總是調用 application: didFinishLaunchingWithOptions 如果您的應用程序不在前台。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM