2016-11-04 2 views
0

Я реализовал обновление местоположения фона в ios на основе таймера (как каждые 1 мин). Он работает хорошо и получает местоположение (значения lat и long), но после 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

Когда вы используете услугу «значительного изменения» (или, откровенно говоря, любые службы местоположения), вы не используете таймер. OS вызывает вы, когда есть изменение в местоположении, а не наоборот.

Что касается вашего таймера, когда приложение приостановлено, таймер больше не запускается. Поэтому не используйте таймер. Но со значительным сервисом изменений, когда устройство обнаруживает, что оно было перемещено на значительное расстояние, ваше приложение будет пробуждено и будет проинформировано. Как Location and Maps Programming Guide: Starting the Significant-Change Location Service говорит:

Если оставить значащего изменение хода услуги определения местоположения и приложение IOS затем приостановлено или прекращено, служба автоматически пробуждается ваше приложение при поступлении новых данных местоположения. При пробуждении приложение помещается в фоновый режим, и вам предоставляется небольшое количество времени (около 10 секунд), чтобы вручную перезапустить службы определения местоположения и обработать данные местоположения. (Вы должны вручную перезапустить службы определения местоположения в фоновом режиме до того, как могут быть доставлены любые ожидающие обновления местоположения, как описано в Knowing When to Start Location Services.) Поскольку ваше приложение находится в фоновом режиме, оно должно выполнять минимальную работу и избегать любых задач (например, запросов к сети), которые может помешать ему вернуться до истечения назначенного времени. Если это не так, ваше приложение будет прекращено. Если для приложения iOS требуется больше времени для обработки данных местоположения, он может запросить дополнительное время выполнения фона, используя метод beginBackgroundTaskWithName:expirationHandler: класса UIApplication.

+0

Но все же приложение не будет работать каждую минуту. Значительные изменения местоположения обновляются примерно в пару раз максимум за 10-15 минут, даже если есть значительное обновление местоположения. Есть ли другой способ сохранить приложение в фоновом режиме и обновить местоположение на моем сервере каждую секунду? Например, если я хочу точно отслеживать маршрут, пройденный автомобилем, обновив его местоположение на моем сервере. –

+0

Во-первых, существенные изменения практически не меняются каждую секунду, потому что, по моему опыту, расстояние, на которое вы должны двигаться, достигает больших результатов (например, не метров, а километров). Если вам нужны постоянные обновления по мере движения автомобиля, вам необходимо (а) зарегистрироваться для режима фоновой навигации на экране возможностей; и (б) затем использовать стандартные службы определения местоположения. Но, опять же, вы не используете таймеры с услугами определения местоположения. Службы местоположения сообщают вам, когда пройдено достаточно расстояния, чтобы инициировать обновление местоположения. – Rob

+0

Спасибо @Rob. Мое фактическое требование: мне нужно обновить местоположение во время состояния фонового/приложения с динамическим интервалом времени (1 час, 1 день, 3 дня и т. Д.). В таком случае, что мне нужно делать? Если возможно, можете ли вы поделиться любым примером кода? – Surezz

-1

@surezz: Пожалуйста, обратитесь к моему ответу ниже. может быть, это поможет вам.

Location URL