У меня странная проблема с обновлением местоположения пользователя. Иногда мое приложение обновляет местоположение, но время от времени прерывает обновление. Я не знаю, где проблема, мой код (от AppDelegate.m) ниже:ios, startMonitoringSignificantLocationChanges - иногда прерывает мониторинг
- (void)applicationDidEnterBackground:(UIApplication *)application
{
NSLog(@"Went to Background");
// Only monitor significant changes
[locationManager startMonitoringSignificantLocationChanges];
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
// Start location services
locationManager = [[CLLocationManager alloc] init];
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
// Only report to location manager if the user has traveled 1000 meters
locationManager.distanceFilter = 1000.0f;
locationManager.delegate = self;
locationManager.activityType = CLActivityTypeAutomotiveNavigation;
[locationManager stopMonitoringSignificantLocationChanges];
[locationManager startUpdatingLocation];
}
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
// Check if running in background or not
BOOL isInBackground = NO;
if ([UIApplication sharedApplication].applicationState == UIApplicationStateBackground) {
isInBackground = YES;
}
if (isInBackground) {
// If we're running in the background, run sendBackgroundLocationToServer
[self sendBackgroundLocationToServer:[locations lastObject]];
} else {
// If we're not in the background wait till the GPS is accurate to send it to the server
if ([[locations lastObject] horizontalAccuracy] < 100.0f) {
[self sendDataToServer:[locations lastObject]];
}
}
}
-(void) sendBackgroundLocationToServer:(CLLocation *)location
{
bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
}];
// Send the data
[self sendDataToServer:location];
if (bgTask != UIBackgroundTaskInvalid) {
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}
}
-(void) sendDataToServer:(CLLocation *)newLocation
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSString *lat = [NSString stringWithFormat:@"%.8f", newLocation.coordinate.latitude];
NSString *lng = [NSString stringWithFormat:@"%.8f", newLocation.coordinate.longitude];
[APIConnection SaveMyPositionWitLat:lat withLng:lng];
});
}
мне нужно обновить местоположение каждый час или, если пользователь изменит расположение более 1000 м. Я выбрал второй способ, чтобы сэкономить аккумулятор, но мое решение не работает, как мне нужно.
Я был бы очень признателен за любую помощь в этом, спасибо заранее!
Thx, это решает мою проблему, но что я должен изменить свой код для получения места каждый час? – Nizzre
Вы могли бы подумать, что для этого потребуется фоновый режим и установка таймера, который вполне возможен, но я не уверен, что Apple одобрит его. В интересах экономии ваших пользователей от безумного использования батареи, я снова предлагаю вам взглянуть на это немного по-другому. Если у вас есть существенные изменения в концепции и мониторинге региона, вы можете сохранить разумное представление о местоположении устройства. Если они не двигались, нет смысла постоянно проверять. В любом случае это другой вопрос, для которого у меня есть некоторые соображения. –
отличная работа здесь @DeanDavids. просто просмотрел вашу библиотеку! – wprater