Как оставаться постоянно в фоновом режиме в iOS8, и вы должны стараться изо всех сил, чтобы сэкономить электроэнергию? Может ли кто-нибудь дать мне совет?Как оставаться постоянным в фоновом режиме в ios8?
ответ
Изучение пример из 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];
}
в настройках проекта, выберите объект и перейти к возможностям, включите фоновый режим и отметьте обновления местоположения и фоновая выборка. Это добавит фоновый режим в ваш проект 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];
}
}
Таким образом, могу ли я изменить желаемую точность, чтобы сэкономить электроэнергию? Но я думаю, что он все еще использует много электроэнергии. –
Уважаемый Tejvansh, Я следую за этим кодом, его работоспособность, но обновление местоположения останавливается через 3 - 4 минуты. Не могли бы вы рассказать, почему обновления местоположений останавливаются. Спасибо! – vky
Теперь я использую этот способ для решения проблемы, но также использует много электроэнергии. Итак, у меня есть идея, как следует: '- (void) locationManager: (CLLocationManager *) manager didUpdateLocations: (NSArray *) местоположения { CLLocation * location = [locations lastObject]; [save locationMessage] [self.locationManager stopUpdatingLocation] } 'Но я нахожу, проблема в том, что когда я останавливаю местоположение, он никогда не будет запущен. –