當應用程序處於後臺時,可以向PHP服務器發出HTTP異步請求? 該應用程序是基於位置的應用程序,應收集當前位置並每隔5(或其他值)分鐘將座標發送到服務器。即使應用程序在後臺,我是否可以將http帖子發送到服務器?我讀了很多關於這方面的想法,但其中一些人說可以做到,其他人不能做。後臺iOS HTTP請求
謝謝,
Alex。
當應用程序處於後臺時,可以向PHP服務器發出HTTP異步請求? 該應用程序是基於位置的應用程序,應收集當前位置並每隔5(或其他值)分鐘將座標發送到服務器。即使應用程序在後臺,我是否可以將http帖子發送到服務器?我讀了很多關於這方面的想法,但其中一些人說可以做到,其他人不能做。後臺iOS HTTP請求
謝謝,
Alex。
它可以完成,但它是不可靠的,因爲你問操作系統有時間發送一些東西,它可以接受或拒絕你的請求。這是我(從什麼地方偷來的SO):
[...] //we get the new location from CLLocationManager somewhere here
BOOL isInBackground = NO;
if ([UIApplication sharedApplication].applicationState == UIApplicationStateBackground)
{
isInBackground = YES;
}
if (isInBackground)
{
[self sendBackgroundLocationToServer:newLocation];
}
- (void) sendBackgroundLocationToServer: (CLLocation *) lc
{
UIBackgroundTaskIdentifier bgTask = UIBackgroundTaskInvalid;
bgTask = [[UIApplication sharedApplication]
beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
}];
NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithCapacity:2];
[dictionary setObject:[NSNumber numberWithDouble:lc.coordinate.latitude] forKey:@"floLatitude"];
[dictionary setObject:[NSNumber numberWithDouble:lc.coordinate.longitude] forKey:@"floLongitude"];
// send to server with a synchronous request
// AFTER ALL THE UPDATES, close the task
if (bgTask != UIBackgroundTaskInvalid)
{
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
}
}
這些鏈接將幫助你......
謝謝,vakio建議,但沒有代碼:d。我認爲beginBackgroundTaskWithExpirationHandler方法將解決我的問題。 – 2012-08-08 12:54:19
首先,從來沒有試圖在一個固定的時間收集位置。這會消耗電池。只需開始列出主要位置更改,如果發生這些更改,然後將新位置發送到服務器。如果您需要更準確的位置,請在發生主要位置變化時啓動GPS,並在您的位置足夠滿足您的要求時停止GPS。然後將數據發送到服務器。 – rckoenes 2012-08-08 12:40:18
這是我做到這一點的方式,我開始更新位置,獲取位置,停止位置更新,將請求發送到服務器,5分鐘後再次開始位置更新,獲取位置,停止等。問題是我能發送請求,如果應用程序處於後臺模式?謝謝。 – 2012-08-08 12:45:18