2016-11-04 71 views
0

我已經在基於定時器的ios中實現了背景位置更新(如每1分鐘)。它的工作良好,並獲得位置(緯度和長度值),但15後它斷開連接。 我無法觸發它了。 任何人都可以幫助我。15分鐘後背景位置更新不適用於ios?

這是我的代碼..提前

- (void)applicationDidEnterBackground:(UIApplication *)application { 

    [[GlobalClass sharedGlobals].locationManager stopMonitoringSignificantLocationChanges]; 

    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8) { 
     [[GlobalClass sharedGlobals].locationManager requestAlwaysAuthorization]; 
    } 
    [[GlobalClass sharedGlobals].locationManager startMonitoringSignificantLocationChanges]; 

    int timeInterval = 60; // (i.e., 1 mins) 

    if (!setTimer) { 
     setTimer = [NSTimer scheduledTimerWithTimeInterval:timeInterval target: self 
                selector: @selector(toMakeServerCall) userInfo: nil repeats: YES]; 
    } 
} 

#pragma mark - Send Current lat & long to the server 

- (void)toMakeServerCall { 

    NSString *latitude = [NSString stringWithFormat:@"%f",[[GlobalClass sharedGlobals] currentLocationObject].coordinate.latitude]; 
    NSString *longitude = [NSString stringWithFormat:@"%f",[[GlobalClass sharedGlobals] currentLocationObject].coordinate.longitude]; 

    NSLog(@"Current Lat is :%@ \n Current Long is :%@ ",latitude,longitude); 

    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http:www.google.com/myLatitude is: %@ and My Longitude is: %@",latitude,longitude]]; 

    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 

} 

感謝。

回答

1

當您使用「重大更改」服務(或坦率地說任何位置服務)時,您不使用計時器。當地點發生變化時,操作系統會呼叫,而不是相反。

關於你的計時器,當應用程序暫停時,定時器將不再運行。所以,不要使用計時器。但有了重大的變更服務,當設備檢測到它已經移動了一段很長的距離時,我們會喚醒您的應用並通知您。正如Location and Maps Programming Guide: Starting the Significant-Change Location Service說:

如果離開了顯著變化位置服務運行和iOS應用隨後被暫停或終止,在新的位置數據到達該服務會自動喚醒你的應用程序。在起牀時間,應用程序被置於後臺,您可以獲得少量時間(大約10秒鐘)以手動重新啓動位置服務並處理位置數據。 (如Knowing When to Start Location Services中所述,您必須在後臺手動重新啓動位置服務,然後才能傳遞任何未決的位置更新。)由於您的應用程序位於後臺,因此它必須執行最少的工作並避免任何任務(如查詢網絡)可能會阻止它在分配的時間到期之前返回。如果沒有,你的應用程序將被終止。如果iOS應用程序需要更多時間來處理位置數據,則可以使用UIApplication類的beginBackgroundTaskWithName:expirationHandler:方法請求更多後臺執行時間。

+0

但是,應用程序仍然不會每分鐘運行。即使存在重要的位置更新,重大的位置更改也會在10到15分鐘內最多更新幾次。有沒有其他方法可以繼續在後臺運行應用程序,並且每秒更新一次到我的服務器的位置?就好像我想通過更新服務器上的位置來準確跟蹤汽車所經過的路線。 –

+0

首先,每秒都不會發生顯着變化,因爲根據我的經驗,您需要實現的距離很遠(例如不是米,而是公里)。如果您想在汽車移動時不斷更新,則必須(a)在功能屏幕中註冊背景導航模式;和(b)然後使用標準的位置服務。但是,您再也不使用定位服務的定時器。定位服務會告訴您何時已經遍歷了足夠的距離以觸發位置更新。 – Rob

+0

感謝@Rob。我的實際要求是,我需要在動態時間間隔(如1小時,1天,3天等)期間在後臺/應用程序終止狀態期間更新位置。在那種情況下,我需要做什麼?如果可能的話,你能分享一下示例代碼嗎? – Surezz

-1

@surezz:請參考下面的URL我的答案。可能會幫助你。

Location URL