2015-05-13 4 views

ответ

0

Found some Solution here

Изучение пример из Ray Wenderlich. Код примера работает отлично.

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

-(void)applicationDidEnterBackground { 
    [self.locationManager stopUpdatingLocation]; 

    UIApplication* app = [UIApplication sharedApplication]; 

    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 
    [app endBackgroundTask:bgTask]; 
    bgTask = UIBackgroundTaskInvalid; 
    }]; 

    self.timer = [NSTimer scheduledTimerWithTimeInterval:intervalBackgroundUpdate 
               target:self.locationManager 
               selector:@selector(startUpdatingLocation) 
               userInfo:nil 
               repeats:YES]; 
} 
+0

Теперь я использую этот способ для решения проблемы, но также использует много электроэнергии. Итак, у меня есть идея, как следует: '- (void) locationManager: (CLLocationManager *) manager didUpdateLocations: (NSArray *) местоположения { CLLocation * location = [locations lastObject]; [save locationMessage] [self.locationManager stopUpdatingLocation] } 'Но я нахожу, проблема в том, что когда я останавливаю местоположение, он никогда не будет запущен. –

1

в настройках проекта, выберите объект и перейти к возможностям, включите фоновый режим и отметьте обновления местоположения и фоновая выборка. Это добавит фоновый режим в ваш проект plist.

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

- (void)applicationDidEnterBackground:(UIApplication *)application { 
    if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]) { //Check if our iOS version supports multitasking I.E iOS 4 
     if ([[UIDevice currentDevice] isMultitaskingSupported]) { //Check if device supports mulitasking 
      UIApplication *application = [UIApplication sharedApplication]; //Get the shared application instance 

      __block UIBackgroundTaskIdentifier background_task; //Create a task object 

      background_task = [application beginBackgroundTaskWithExpirationHandler: ^{ 
       [application endBackgroundTask:background_task]; //Tell the system that we are done with the tasks 
       background_task = UIBackgroundTaskInvalid; //Set the task to be invalid 
       //System will be shutting down the app at any point in time now 
      }]; 
     } 
    } 
} 

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

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 
{ 
    CLLocation *location = [locations lastObject]; 
    if (location != nil) { 
     strLatitude = [NSString stringWithFormat:@"%f", location.coordinate.latitude]; 
     strLongitude = [NSString stringWithFormat:@"%f", location.coordinate.longitude]; 
    } 
} 
+0

Таким образом, могу ли я изменить желаемую точность, чтобы сэкономить электроэнергию? Но я думаю, что он все еще использует много электроэнергии. –

+0

Уважаемый Tejvansh, Я следую за этим кодом, его работоспособность, но обновление местоположения останавливается через 3 - 4 минуты. Не могли бы вы рассказать, почему обновления местоположений останавливаются. Спасибо! – vky

 Смежные вопросы

  • Нет связанных вопросов^_^