簡體   English   中英

CoreLocation:當iPhone在重大位置變化后開啟時,如何喚醒我的應用程序?

[英]CoreLocation: How do I wake my app up when iPhone turned on after significant location change?

我正在嘗試構建一個依賴於區域監控和重要位置更改的應用程序。 我正在測試的具體方案是:

  1. 用戶(使用我的應用程序)前往機場,周圍有一個區域
  2. 由於地區違規行為,我的應用程序被成功喚醒了。
  3. 他們像一個好小的乘客一樣關掉他們的iPhone。
  4. 他們降落在一些遙遠的城市
  5. 他們重新打開手機

我是否希望通過重大變更監控在后台提供新位置? 一直乘坐航班來測試這個太貴了所以我正在通過關閉手機,行駛5英里並將其重新打開進行測試。

擾流板警報! 當我打開手機時,我沒有得到新的位置。 也許我需要開得更遠,但是5英里的距離應該可以用於更換電池塔......盡管電話關閉后它並不是真正的電池塔更換。

事實證明,在這種情況下,應用程序以一種非常有趣的方式被喚醒。 我在docMonitoringSignificantLocationChanges的doc中找到了這個段落:

如果您啟動此服務並且您的應用程序隨后終止,則系統會在新事件到達時自動將應用程序重新啟動到后台。 在這種情況下,傳遞給locationManager的選項字典:didUpdateLocations:應用程序委托的方法包含密鑰UIApplicationLaunchOptionsLocationKey,以指示您的應用程序是由於位置事件而啟動的。 重新啟動后,您仍必須配置位置管理器對象並調用此方法以繼續接收位置事件。 重新啟動位置服務時,會立即將當前事件傳遞給您的代理。 此外,即使在啟動位置服務之前,也會使用最新的位置對象填充位置管理器對象的位置屬性。

我加粗了我認為非常重要的一部分。 首先,當手機開始備份並且操作系統意識到它已經移動了很長的距離時,它不會調用locationManager:didUpdateLocations:正如我所期望的那樣,它在文檔中說明了。 它將在后台啟動應用程序,調用應用程序:didFinishLaunchingWithOptions:AppDelegate的方法。 提供的NSDictionary將包含一個特殊密鑰(在上面的文檔中注明),告訴您它是由於位置更改而啟動的。 然后,您可以再次調用locationManager:startMonitoringSignificantLocationChanges。

希望這有助於其他人。 我已經讓自己成為一個簡單的小測試器應用程序,在真空中測試它並驗證它對我有用。

如果在連接到Xcode的調試器時運行應用程序,則可以模擬位置更改。 這似乎適用於模擬器或系留設備。

https://developer.apple.com/library/ios/recipes/xcode_help-debugger/articles/simulating_locations.html

暫無
暫無

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

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