Многозадачность iPhone - как сделать обновления службы «местоположение» «необязательными для пользователя» - PullRequest
0 голосов
/ 11 февраля 2012

Учитывая влияние на батарею, я бы хотел, чтобы пользователи сами решали, нужна ли им функциональность моего приложения постоянно, как в «многозадачном / фоновом исполнении» или только когда приложение находится на переднем плане.Читая эту ветку:

Как мне получать фоновое обновление местоположения каждые n минут в моем приложении iOS?

дало мне несколько идей о том, что может быть лучшим способомпредоставить пользователю возможность включить функцию многозадачности.Я надеюсь, что у кого-то, кто рассматривал эту дилемму, может быть предложение о «лучшем способе» ее решить.

Проблема - Многозадачность местоположения включается через plist путем установки элемента UIBackgroundModesв «местоположение».Это для всего приложения и постоянно.Как сделать функцию соответствующей NSUserDefault?

Потенциальное решение A - Мое предложение выглядит примерно так:

- (void)applicationWillResignActive:(UIApplication *)application {
    if ( [[NSUserDefaults standardUserDefaults] boolForKey:@"wantsBackgroundLocationEventProcessing"] ) {
        //Continue using the location subsystem
    } else {
        self.locationManager = nil; //Custom setter does all required cleanup
    }
}

Однако я боюсь, что в этомесли приложение все еще будет получать события местоположения, оно просто не сможет ничего с ними поделать - влияние на время работы от батареи все равно будет присутствовать.

Любые идеи о том, как сделать UIBackgroundModes 'location' необязательнымиво время выполнения?

1 Ответ

1 голос
/ 11 февраля 2012

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

[locationManager startUpdatingLocation] будет постоянно обновлять изменение местоположения, когда вам это больше не нужно, просто используйте [locationManager stopUpdatingLocation], чтобы повернутьотключите GPS для экономии заряда батареи.

или используйте [locationManager startMonitoringSignificantLocationChanges], чтобы получать уведомления о существенных изменениях.

...