Как отслеживать местоположение пользователя в фоновом режиме?

Я ищу приложение с открытым исходным кодом или библиотеку для отслеживания местоположения пользователя в фоновом режиме. Теперь я пытаюсь сделать это с помощью CLLocation и фоновых задач, но для моего дела недостаточно точности. Не могли бы вы объяснить, как приложения, такие как «ходы», «runkeeper», «endmondo», создают мой маршрут? Следует ли использовать акселерометр или компас для создания маршрута между базовыми точками CLLocation?

Некоторый код:

 //location manager init self.locationManager = [[CLLocationManager alloc] init]; self.locationManager.distanceFilter = kCLDistanceFilterNone; self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; self.locationManager.delegate = self; #pragma mark - CLLocationManager Delegate - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { if ([self isInBackground]) { if (self.locationUpdatedInBackground) { bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler: ^{ [[UIApplication sharedApplication] endBackgroundTask:bgTask]; }]; self.locationUpdatedInBackground(newLocation); [self endBackgroundTask]; } } else { if (self.locationUpdatedInForeground) { self.locationUpdatedInForeground(newLocation); } } } 

UPD: Justed проверил мое приложение со следующими свойствами

 self.locationManager.distanceFilter = kCLDistanceFilterNone; self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; self.locationManager.activityType = CLActivityTypeFitness; self.locationManager.pausesLocationUpdatesAutomatically=NO; 

В этом случае у меня около 10 обстрелянных событий в течение 1,5-часовой поездки

8 Solutions collect form web for “Как отслеживать местоположение пользователя в фоновом режиме?”

использование

kCLLocationAccuracyBestForNavigation

проверьте это .

Вам нужно добавить в свой файл «Info.plist» ключ UIBackgroundModes (массив) со значением «location» (регистры приложений для обновлений местоположения). Здесь вы можете проверить все фоновые режимы.

Таким образом, ваше приложение использует службы определения местоположения. Затем прочитайте руководство по программированию местоположения .

Вы должны внести некоторые изменения в свой Info.plist:

  • Если ваше приложение полагается на правильные функции определения местоположения, добавьте сервисы местоположения в UIRequiredDeviceCapabilities
  • если ваше приложение требует оборудования GPS, добавьте gps в UIRequiredDeviceCapabilities
  • если вам нужно запустить приложение более 10 минут в фоновом режиме, добавьте его в UIBackgroundModes. Затем ваш менеджер местоположения будет предоставлять места за пределами 10-минутного предела.
  • вы также должны установить NSLocationUsageDescription (также можно локализовать)

Получение событий местоположения в фоновом режиме

Если вашему приложению нужны обновления местоположения, если приложение находится на переднем плане или в фоновом режиме, для этого есть несколько вариантов. Предпочтительным вариантом является использование значимой службы изменения местоположения, чтобы разбудить ваше приложение в соответствующие моменты времени для обработки новых событий. Однако, если вашему приложению необходимо использовать стандартную службу определения местоположения, вы можете объявить свое приложение как требующее службы определения местоположения.

Приложение должно запрашивать службы определения местоположения только в том случае, если отсутствие этих служб ухудшит его способность работать. Кроме того, любое приложение, которое запрашивает службы определения местоположения фона, должно использовать эти службы, чтобы обеспечить ощутимую выгоду для пользователя. Например, пошаговое навигационное приложение будет вероятным кандидатом на услуги фонового местоположения из-за необходимости отслеживать позицию пользователя и сообщать, когда придет время сделать следующий поворот.

Ваша проблема – обработчик фона. Удалите его и включите режим фона gps в файле plist. то вы должны получать полную мощность gps все время.

Установить pausesLocationUpdatesAutomatically=NO

Это новое в ios6.

От CLLocationManager :

Разрешение диспетчеру местоположения приостанавливать обновления может улучшить срок службы батареи на целевом устройстве, не жертвуя данными о местоположении. Если для этого свойства установлено значение «ДА», диспетчер местоположений приостанавливает обновления (и отключает соответствующее оборудование) в моменты, когда данные местоположения вряд ли изменятся. Например, если пользователь останавливается на еде при использовании навигационного приложения, менеджер местоположений может приостанавливать обновления в течение определенного периода времени. Вы можете помочь определить, когда приостанавливать обновления местоположения, назначая значение свойству activityType.

Значением по умолчанию этого свойства является ДА.

Для анализа добавьте эти методы в свой делегат LocationManager:

 - (void)locationManagerDidPauseLocationUpdates:(CLLocationManager *)manager { NSLog(@"locMan: locationManagerDidPauseLocationUpdates"); } - (void)locationManagerDidResumeLocationUpdates:(CLLocationManager *)manager { NSLog(@"locMan: locationManagerDidResumeLocationUpdates"); } 

Вы можете настроить материал для мониторинга в вашем VC, как показано ниже

in viewDidLoad сделать так, как показано ниже

 CLLocationManager locationManager = [[CLLocationManager alloc] init]; locationManager.delegate = self; locationManager.distanceFilter = kCLDistanceFilterNone; locationManager.desiredAccuracy = kCLLocationAccuracyBest;(Accuracy according to your need) [locationManager startUpdatingLocation]; 

чем вы должны переопределить ниже двух необязательных методов делегирования протокола CLLocationManagerDelegate

для iOS6 +

 - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{} 

и для iOS 2-6

 - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 

в этих методах вы получите обновленное местоположение. используйте его, как хотите. каждый раз, когда местоположение обновляется, этот метод получает вызовы.

вы не запрашиваете код. Вы просите: «Я ищу приложение с открытым исходным кодом или библиотеку»

Это может помочь вам посетить этот сайт.

надеюсь, что это поможет вам,

Также учебник .

Вот мое решение этого,

Объявить переменную экземпляра:

 CLLocationManager *locationManager; 

Обязательно включите делегат

 <CLLocationManagerDelegate> 

В viewDidLoad:

 locationManager = [[CLLocationManager alloc] init]; locationManager.delegate = self; locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move, location is updated locationManager.desiredAccuracy = kCLLocationAccuracyBest; // get best current locaton coords locationManager.headingFilter = 1; [locationManager startUpdatingLocation]; [locationManager startUpdatingHeading]; 

Внедрить метод делегата:

 - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { int degrees = newLocation.coordinate.latitude; double decimal = fabs(newLocation.coordinate.latitude - degrees); int minutes = decimal * 60; double seconds = decimal * 3600 - minutes * 60; NSString *lat = [NSString stringWithFormat:@"%d° %d' %1.4f\"", degrees, minutes, seconds]; NSLog(@" Current Latitude : %@",lat); latitudeLocation.text = lat; degrees = newLocation.coordinate.longitude; decimal = fabs(newLocation.coordinate.longitude - degrees); minutes = decimal * 60; seconds = decimal * 3600 - minutes * 60; NSString *longt = [NSString stringWithFormat:@"%d° %d' %1.4f\"", degrees, minutes, seconds]; NSLog(@" Current Longitude : %@",longt); longitudeLocation.text = longt; } 

Отказ от ответственности: я работаю для Cintric

Мы также хотели иметь возможность точно отслеживать местоположение пользователей в фоновом режиме (даже после того, как приложение было убито). Мы долгое время решали проблему, особенно фокусируясь на разряде батареи.

Мы опубликовали замечательное сообщение в блоге о том, как мы его решили. А также предоставляют решение для перетаскивания SDK. Это не открытый исходный код, но вы можете интегрировать его бесплатно:

Вы можете загрузить файл .framework, перетащить его в свой проект и инициализировать с помощью одной строки кода: [CintricFind initWithApiKey:@"YOUR_API_KEY_HERE" andSecret:@"YOUR_SECRET_HERE"];

Вы можете получить ключ API бесплатно. Здесь есть документы, объясняющие все.

  • воспроизведение видео в ios 6
  • Ошибка утверждения при использовании UISearchDisplayController в UITableViewController
  • Идентификатор рекламы и идентификаторForVendor возвращают «00000000-0000-0000-0000-000000000000»,
  • как выбрать viewcontroller на основе выбора
  • Использовать UIRefreshControl для UIWebView
  • ACAccountStore не извлекает учетную запись Facebook для пользовательского SLRequest
  • Некоторые поля UIText не отвечают в iOs6
  • Поддержка iOS 4.3 до iOS 6.0
  • IBAction срабатывает дважды при быстром нажатии
  • Кто-нибудь знает, какие методы устарели в IOS 6.0?
  • Обеспечьте гладкую прокрутку для Photo Grid с тысячами изображений с диска
  • Interesting Posts

    Центрирование ярлыка в UIView

    Основные данные: результат выборки из нескольких объектов или отношений

    ios, хранящий токен входа в KeyChain, не может извлекаться, редко и случайным образом, но последовательно

    Непризнанный селектор, отправленный в класс

    Xcode 8.2.1 – Ошибка: неверная версия битового кода (продюсер: «802.0.41.0_0» Reader: «800.0.42.1_0»)

    Авто-матч игрового центра и endTurnWithNextParticipants

    Где сохранить состояние в приложении для iPhone

    Возможно ли протестировать кампанию Google Analytics, не отправляясь в магазин приложений Apple?

    Сбой приложения iOS в режиме управляемого доступа

    Отображение всех установленных приложений на iPhone программно?

    Нормализовать или канонизировать строку для основных данных?

    Внедрение настраиваемого маркераInfoWindow в быстром нерабочем режиме

    Firebase Пригласить использовать с Facebook

    Почему я не могу вставить больше отрицательных значений в нужную вставку содержимого UIButton?

    Загрузка больших изображений с помощью Base64 и JSON

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.