Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在后台执行iOS HTTP请求_Iphone_Objective C_Core Location - Fatal编程技术网

Iphone 在后台执行iOS HTTP请求

Iphone 在后台执行iOS HTTP请求,iphone,objective-c,core-location,Iphone,Objective C,Core Location,当应用程序处于后台时,是否可以向PHP服务器发出HTTP异步请求? 该应用程序是一个基于位置的应用程序,应该每5分钟(或其他值)收集当前位置并将坐标发送到服务器。即使应用程序在后台,我也可以向服务器发送http帖子吗?我读了很多关于这方面的想法,但其中一些告诉我可以做到,另一些告诉我不能做到 谢谢 Alex。这是可以做到的,但不可靠,因为你要求操作系统给你时间发送一些东西,而它可以接受或拒绝你的请求。这就是我所拥有的(从某处偷来的): 这些链接将帮助您解决 首先,切勿尝试在固定时间收集位置。这会

当应用程序处于后台时,是否可以向PHP服务器发出HTTP异步请求? 该应用程序是一个基于位置的应用程序,应该每5分钟(或其他值)收集当前位置并将坐标发送到服务器。即使应用程序在后台,我也可以向服务器发送http帖子吗?我读了很多关于这方面的想法,但其中一些告诉我可以做到,另一些告诉我不能做到

谢谢


Alex。

这是可以做到的,但不可靠,因为你要求操作系统给你时间发送一些东西,而它可以接受或拒绝你的请求。这就是我所拥有的(从某处偷来的):


这些链接将帮助您解决


首先,切勿尝试在固定时间收集位置。这会耗尽电池电量。只需列出主要位置更改,如果发生这些更改,则将新位置发送到服务器。如果您需要更精确的位置,请在主要位置发生变化时启动GPS,并在位置足够精确以满足您的要求时停止GPS。然后将数据发送到服务器。我就是这样做的:启动更新位置、获取位置、停止位置更新、将请求发送到服务器、5分钟后再次启动位置更新、获取位置、停止等。问题是,如果应用程序处于后台模式,我是否能够发送请求?谢谢。非常感谢,我宣布你为年度开发者:)。所以,基本上,它有时可以工作,有时不可以,这取决于操作系统。我可以在模拟器中测试它吗。
isInBackground
完全没有必要。@AlexandruCircus年度开发者奖?他写道他偷了sonewhere的密码所以…是的,你对我来说就像上帝一样。谢谢,这是瓦基奥的建议,但没有代码:d。我认为beginBackgroundTaskWithExpirationHandler方法将解决我的问题。
[...] //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];
    }
}