簡體   English   中英

didEnterRegion執行順序?

[英]didEnterRegion order of execution?

因此,我問了一個關於我與didEnterRegion相關的代碼的問題,但也許我太具體了,因此我可以請某人用更通用的術語來闡明用於區域監視的方法調用的順序,特別是當應用程序在后台運行時。

我的理解是:

  1. 應用程序注冊區域,調用startMonitoringForRegion:
  2. 用戶點擊主頁按鈕或鎖定設備,應用程序進入后台。
  3. 設備位置是在操作系統級別(與應用程序分開)進行監控的,操作系統永遠不會啟動該應用程序來確認用戶當前的位置。
  4. 當用戶越過邊界進入該區域時,操作系統將查找最初注冊該區域的應用程序並啟動該應用程序。
  5. 該應用程序在后台啟動(但未調用didFinishLaunchingWithOptions:),設置了CLLocationManager委托,並調用了didEnterRegion委托方法。
  6. 在我的情況下,這將設置一個UILocalNotification並立即顯示(如果正在使用其他應用程序,則橫幅顯示在主屏幕上;如果手機處於休眠狀態,則顯示在鎖定屏幕上)。
  7. 用戶通過在鎖定屏幕上滑動或點擊橫幅來操作通知,啟動應用程序並調用appWillEnterForeground / appWillBecomeActive,並調用應用程序委托didRecieveLocalNotification:方法(如果已實現)。

這是我的理解,這可能是錯誤的,因為如果應用程序在后台運行,則不會觸發我的UILocalNotification。 有人可以弄清楚哪些位錯了嗎?

經過進一步的測試,我得出的結論是我的代碼沒有任何問題,實際上這似乎是蘋果公司對區域監控的實施不佳。 它似乎只比監視重大位置變化好一點,並且仍然依賴於wifi網絡和基站的變化。 即使在英國的一個主要城市內,我也都發現EnterRegion並沒有被觸發,直到您到達一英里寬的區域最多1000米為止(如果觸發了)。 這就解釋了為什么在通過Xcode測試並強制定位時每次都能工作的原因。

到目前為止,我所能解決的唯一問題是計算每次更新用戶位置時剩余的距離,並在小於區域radius / 2時手動調用didEnterRegion委托方法。 當您進入邊界10m以上時,這應該由Apples代碼自動完成,但是由於上述原因,我發現這樣做並不可靠。

但是,由於在后台運行該應用程序時無法使用GPS精度更高的定期更新,而這僅是在后台運行時才存在的問題,這根本不是解決方案。 :o(

暫無
暫無

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

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