1

我正在開發使用CLLocationManager來獲取GPS數據的iOS應用程序。當用戶使用快速應用程序切換器停止應用程序時停止CLLocationManager

當用戶按下主頁按鈕然後使用快速應用程序切換器殺死應用程序時,停止CLLocationManager的正確方法是什麼?

如何停止CLLocationManager然後停止GPS數據輪詢?有誰知道一個很好的方法來實現這一目標,導致通常是當用戶關閉應用程序,我不能執行任何代碼....

編輯: 當我發送的應用背景,它應該仍然得到significantLocationChanges ,所以當應用程序發送到後臺時,我無法停止CLLocationManager!

回答

1

在AppDelegate中有一個名爲applicationWillResignActive的方法。此方法在您的應用即將發送到後臺時運行。如果你可以從你的AppDelegate訪問CLLocationManager,你可以在那裏停下來。否則,您可以從applicationWillResignActive發佈通知,並且您的CLLocationManager可以訂閱該通知的任何類並從那裏處理它。

張貼通知如下:

[[NSNotificationCenter defaultCenter] postNotificationName:@"appWillResignActive" object:nil]; 

和訂閱像這樣:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleResign:) name:@"appWillResignActive" object:nil]; 

那麼一些這樣的方法:

- (void)handleResign: (NSNotification *)notification 
{ 
    // stop CLLocationManager 
} 

編輯: 如果你想運行代碼當應用程序被殺害,那麼你可以在AppDelegate的這個方法中運行該代碼:

- (void)applicationWillTerminate:(UIApplication *)application 
+1

你不需要發表您自己的通知,如果不是應用程序委託其他類需要應對這些事件:看到UIApplicationWillResignActiveNotification 等。 – rickster

+0

SteveB,rickster - 我剛剛編輯了我的文章,因爲我還需要在應用程序處於後臺時進行位置更改,因此在進入後臺時無法停止CLLocationManager。無論如何謝謝你的回答! – joshi737

+0

所以你只想停止當用戶手動殺死應用程序?發生這種情況時,應用程序中的所有代碼都應停止運行。這就是殺死它的一點。那時你甚至可以確認事情還在發生?你是否輸出日誌文件並在應用程序被殺後看到活動? – SteveB