2014-01-12 95 views
3

我的CLLocationManager在用戶第一次進入應用程序時啓動。我正在初始化它:ios7中的CLLocationManager停止工作

​​

而我正在使用geofencing。

我在我的.plist中定義了required background modes

如果我在模擬器中使用gpx文件測試應用程序,它工作正常。到現在爲止還挺好。

不過,我在這兩個環節上寫着:

Start Location Manager in iOS 7 from background task

Background Location Services not working in iOS 7

,在iOS7,當位置沒有幾分鐘的改變則CLLocation進入睡眠狀態。

我的問題是:

我不叫didUpdateLocation可言,我只希望didEnterRegion,或didExitRegion。從理論上講,它會工作嗎,甚至應用程序被殺或用戶位置在最後一小時沒有改變,然後決定移動?

+1

如果應用程序被用戶明確地殺害,iOS7下,你不會得到任何更新。對此無能爲力。 – danielbeard

+0

看看這個SO帖子:http://stackoverflow.com/questions/18639976/significant-blocation-change-event-in-ios7-background-service-call –

+0

@danielbeard如何說:「如果應用程序被殺害明確地由用戶在iOS7下,你將不會得到任何更新「!!!您可以使用Apple的基於位置的提醒來檢查此行爲:如果您殺死「剩餘」應用程序 - 您將不會收到關於位置進入/退出的通知! – TonyMkenu

回答

2

有你的問題的幾個要素:

1-爲了不老調重彈的是在前面的回答,我想先看看我的這個鏈接的答案。它將幫助,如果用戶停止移動您解決圍繞核心位置更新停止和如何修改這種行爲:如果用戶殺死iOS7的應用程序(在應用切換器彈它) iOS7 Core Location not updating

2- ,該應用程序將不會重新啓動,因此在手機重新啓動後,您的位置更新和區域監控都不會重新啓動。另一方面,如果應用程序因內存壓力而死亡,則iOS將重新啓動應用程序,並在後臺重新啓動位置更新和區域監視。另外,如果您重新啓動手機,地區監控將自動重啓。你顯然必須啓用背景模式。

3-現在你正在談論你的問題中的區域,所以我假設你已經實現了CLCircularRegion。如果不是,那應該是第一步,然後是「startMonitoringForRegion」。就你而言,即使用戶已停止移動一段時間然後開始移動,應用程序將在應用程序進入或退出區域時被喚醒/委託。

4-確保使用locationManager:didDetermineState:forRegion:以及。這將允許應用程序在開始時確定其位於區域內還是區域外。當您想到應用程序正在啓動並且沒有發生區域交叉時,這很有用,但瞭解用戶位於區域內還是區域外很重要。

希望這有助於

+0

感謝您的答案。我已經實施了其中大部分。只是一個關於2的問題 - 當用戶殺死應用程序時,區域監控停止工作?所以,即使他進入該地區/離開它,如果該應用程序被用戶殺害,那麼代理不會被調用,對吧? – ghostrider

+0

這是正確的。這是爲了保護用戶。蘋果希望用戶始終保持控制。因此,如果用戶表示他/她不希望應用程序在後臺運行(即,用戶關閉應用程序),那麼它被殺害,而不是重新啓動(及其周邊地區的監控是不是重新啓動)。 – Spectravideo328