Вызов stopUpdatingLocation
действительно остановит GPS и т. Д., Но если вы поместите этот вызов в locationManager:didUpdateToLocation:fromLocation
вашего CLLocationManager delegate
, то он никогда не будет вызван.
Имейте в виду, что этот методвыполняется только тогда, когда более точная позиция или a (в соответствии с активным дистанционным фильтром) значительно отличается от позиции .Если устройство вообще не двигается и если обстоятельства, влияющие на точность, также не меняются, его нельзя вызывать часами (я сам проверял это в течение нескольких минут), и GPS также будет оставаться включенным в течение этого времени.
Для приложений, которые работают только на переднем плане, вы можете использовать NSTimer
60 минут, но для приложений, которые работают в фоновом режиме, наиболее близким к рабочему решению, которое я нашел до сих пор, является запланированное UILocalNotification
,Но даже для этого требуется, чтобы пользователь подтвердил предупреждение, прежде чем приложение перезапустится и сможет отключить GPS.
Может быть, beginBackgroundTaskWithExpirationHandler:
- ключ к лучшему решению, но я до конца не понялпока.