我正在開發一個應用程序,當您在附近的升級地點時發送通知。 我的問題是,當我去背景,然後我退出應用程序,我不希望位置服務工作時,應用程序不工作(但我希望他們在後臺工作)。當應用程序終止時停止位置更新
我只看到3應用時,應用程序關閉時關閉GPS,我想知道他們是怎麼做的,Facebook,谷歌地圖和蘋果地圖,不四方,不實地考察...
謝謝每一個人。
我正在開發一個應用程序,當您在附近的升級地點時發送通知。 我的問題是,當我去背景,然後我退出應用程序,我不希望位置服務工作時,應用程序不工作(但我希望他們在後臺工作)。當應用程序終止時停止位置更新
我只看到3應用時,應用程序關閉時關閉GPS,我想知道他們是怎麼做的,Facebook,谷歌地圖和蘋果地圖,不四方,不實地考察...
謝謝每一個人。
可以爲你開始的LocationManager比停止位置更新
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationWillTerminate:)
name:UIApplicationWillTerminateNotification
object:nil];
方法來執行,當您收到通知增加一個觀察者
- (void)applicationWillTerminate:(NSNotification *)notification {
//stop location updates
}
我試過了,但不幸的是它並不那麼容易......當你關閉應用程序並且你在後臺時它沒有發送該通知。 –
@JavierPeigneux你測試的方式是什麼?當其他應用程序處於前臺時,我們會看到' - (void)applicationWillTerminate:(UIApplication *)application'和'UIApplicationWillTerminateNotification',我們通過刷新快照來關閉我們的應用程序。 –
@AlexPeda問題是,當應用程序在後臺,然後你通過刷新快照關閉它...我用日誌,斷點測試它,我有代碼來停止在代碼的其餘部分工作的gps它從來沒有在那裏工作... –
通過@GuyS在此提供的解決方案主題應該工作。如果應用程序處於後臺,我會收到,然後通過刷新快照將其關閉。請檢查您是否正確使用NSNotificationCenter
(特別是添加和刪除通知)。另外,當應用程序處於後臺時,請檢查您訂閱的對象是否處於活動狀態。
另一個類似的解決方案是在您的AppDelegate
方法中將禁用GPS的代碼放入合適的UIApplicationDelegate
回調中。
- (void)applicationWillTerminate:(UIApplication *)application {
//stop location updates
}
我找到了正確的回答我的問題becouse @GuyS第二崗位:
添加在您的AppDelegate.m applicationDidEnterBackground
- (void)applicationDidEnterBackground:(UIApplication *)application
{
UIApplication *app = [UIApplication sharedApplication];
if ([app respondsToSelector:@selector(beginBackgroundTaskWithExpirationHandler:)]) {
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
// Synchronize the cleanup call on the main thread in case
// the task actually finishes at around the same time.
dispatch_async(dispatch_get_main_queue(), ^{
if (bgTask != UIBackgroundTaskInvalid)
{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}
});
}];
}
}
並聲明變量:
UIBackgroundTaskIdentifier bgTask;
之後,您只需停止applicationWillTerminat中的位置服務e ...
謝謝你的回覆。
這應該是一個公認的答案,它解決了當應用程序在後臺時調用applicationWillTerminate的問題。 –
根據我的理解,您希望在應用程序退出時刪除位置,但在後臺運行位置。在'AppDelegate'的'applicationWillTerminate'方法中。您需要添加'stopUpdatingLocation'或'stopMonitoringSignificantLocationChanges'並將位置對象設置爲'nil'。也許它會幫助你。 –
對不起,這不是那麼容易...當你關閉應用程序,你在後臺它不會觸發applicationWillTerminate ... –
哦,現在我可以理解你的問題。 :) –