2016-07-20 16 views
0

Ich habe eine Funktion, die ich in der App Hintergrund Modus ausführen und mindestens jede Minute ausgeführt werden, um auf Wifi-Verbindung zu überprüfen und Entscheidungen zu treffen. Ich verwende locationManager Delegat, so dass ich meine NSTimer im Hintergrund ausführen kann. Der Standortmanager verbraucht jedoch viel Batterieleistung. Diese App ist nicht für Apple-Version. Aber ich suche nach effizienteren Einstellungen für den Standortmanager, damit es nicht so machthungrig ist oder vielleicht andere gute Ideen? Die aktuellen Einstellungen, die ich habe, sind in Ordnung, aber seit ich die automatische Pause für den Standortmanager aktiviert habe, werden Funktionsupdates zu sehr verzögert. Bevor ich zwei Delegates-Methoden (didEnterRegion und didExitRegion) verwendete, waren diese leistungshungriger und nicht genau. Ich lese jede Menge verfügbar Tutorials und checkten anderen verwandten Beiträge auf Überlauf-Stack, aber haben nichts gefunden, das mir meine problm zu lösen helfen würde Hier ist, was ich in meiner Delegatfunktion haben:NSTimer im Hintergrund-Modus mit locationManager Delegat ("Cheat Weg") SWIFT

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
     self.timer = NSTimer.scheduledTimerWithTimeInterval(45, target: self, selector: #selector(self.checkNetworkSSID), userInfo: nil, repeats: true) 
     manager.stopMonitoringSignificantLocationChanges() 
     manager.stopUpdatingLocation() 
    } 

Hier ist, was ich habe in meinem viewDidLoad und AppDelegate

manager = CLLocationManager() 
     manager?.delegate = self 
     manager?.requestWhenInUseAuthorization() 
     manager?.startUpdatingLocation() 
     manager?.desiredAccuracy = kCLLocationAccuracyThreeKilometers 
     manager?.pausesLocationUpdatesAutomatically = true 
     manager?.activityType = CLActivityType.Fitness 

Antwort

0

Für Standort in Hintergrund bekommen müssen Sie auf Ihrem Code diesen Code aufzurufen und stellen Sie sicher, NSLocationAlwaysUsageDescription in dir hinzufügen r info.plist

 locationManager = CLLocationManager() 
     locationManager.delegate = self 
     locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers 
     locationManager.pausesLocationUpdatesAutomatically = false 
     locationManager.startMonitoringSignificantLocationChanges() 
     if #available(iOS 9.0, *) { 
      locationManager.allowsBackgroundLocationUpdates = true 
     } 
     locationManager.requestAlwaysAuthorization() 
     locationManager.startUpdatingLocation() 
+0

Ich habe NSLocationAlwaysUsageDescription in Plist. Ich interessiere mich nicht wirklich für irgendwelche Standortänderungen, weil ich sie nicht verwende, benutze ich nur einen Delegaten, damit er meinen NSTimer laufen lässt. Wie wäre es mit startMonitoringSignificantLocationChanges() wofür ist das wirklich? –

Verwandte Themen