У меня есть приложение, которое захватывает местоположение пользователя и отправляет эту информацию на мой сервер.[iOS] захват пользователя местоположение: уточнение
Я начал службу LocationManager с:
- (CLLocationManager *)locationManager {
if (_locationManager == nil) {
_locationManager = [[CLLocationManager alloc] init];
_locationManager.delegate = self;
isUpdatingLocation = NO;
}
return _locationManager;
}
-(void) startLookingForLocation{
[self locationManager].desiredAccuracy = kCLLocationAccuracyBest;
[self locationManager].distanceFilter = 250;
if([[self locationManager]respondsToSelector:@selector(setPausesLocationUpdatesAutomatically:)])
[[self locationManager] setPausesLocationUpdatesAutomatically:YES];
if([[self locationManager]respondsToSelector:@selector(setActivityType:) ])
[[self locationManager] setActivityType:CLActivityTypeFitness];
[[self locationManager] startUpdatingLocation];
[[self locationManager] startUpdatingHeading];
isUpdatingLocation = YES;
}
и остановить его:
-(void) stopLookingForLocation{
[[self locationManager] stopUpdatingLocation];
[[self locationManager] stopUpdatingHeading];
isUpdatingLocation = NO;
}
Так что, когда я обнаружить изменение местоположения пользователя:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
[self setCurrentLocation:newLocation];
BOOL isInBackground = NO;
if ([UIApplication sharedApplication].applicationState == UIApplicationStateBackground)
{
isInBackground = YES;
}
if (isInBackground)
{
UIBackgroundTaskIdentifier bgTask = [[UIApplication sharedApplication]
beginBackgroundTaskWithExpirationHandler:
^{
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
}];
// Send user-location to my server
if (bgTask != UIBackgroundTaskInvalid)
{
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}
}
else
{
// Send user-location to my server
}
}
и все работает правильно. (Я полагаю).
Когда приложение перейдет в фоновый режим, я призываю этот метод в AppDelegate - (ничтожной) applicationDidEnterBackground: (UIApplication *) применение { [locationManager startMonitoringSignificantLocationChanges]; }
и когда приложение возвращение на передний план:
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[locationManager stopMonitoringSignificantLocationChanges];
}
Но у меня есть некоторые сомнения. Таким образом, если приложение закрыто, мое приложение продолжает связываться с местоположением на сервере?
Как я могу отправить местоположение только тогда, когда я нахожусь в фоновом режиме или на переднем плане?
EDIT: Я также установил:
UIBackgroundModes расположения
@Cecco Я уже столкнулся с этой проблемой, а затем, наконец, получил это решение. –
Извините, но я новичок в Objective-C. Можете ли вы опубликовать мне фрагмент кода, чтобы я мог понять этот вопрос? Спасибо за ваш ответ. – CeccoCQ
Большое спасибо. Но этот фрагмент отправляет местоположение на сервер только тогда, когда приложение находится на переднем плане, а также когда оно находится в фоновом режиме или закрыто? Я полагаю, что только в фоновом режиме и переднем плане (для закрытых я имею в виду, когда пользователь дважды нажимает на домашний ключ и закрывает приложение). – CeccoCQ