2016-05-12 12 views
0

Ich verwende CoreLocation in meiner iOS-Anwendung. Ich verwende signifikante Standortänderungen und einige Geofences. Es funktioniert derzeit gut, aber ich möchte meine Standortdatenqualität verbessern, indem ich mehr Standortaktualisierungen erhalte.CoreLocation - Geofence-Ereignis zum Starten der Standortdienste

Derzeit habe ich eine CLLocationManager Instanz in meiner Anwendung ausgeführt. Diese einzelne Instanz empfängt Geofence und LocationUpdates.

Soweit ich weiß, signifikante Änderungen sind mit Zellenturm Veränderungen verbunden, die für mich genug ist, aber ich habe einige Fälle, die ich brauche mehr Standortdaten.

Ich möchte nicht startUpdatingLocation verwenden, da es den Batterieverbrauch erhöht, aber ich habe eine Idee über das Aktivieren und Deaktivieren von locationUpdates (während die wichtigen Updates offen bleiben) zwischen den Geofences. Also plane ich, eine zweite Instanz von CLLocationManager zu starten, wenn ein Geofence-Ereignis auftritt. Ich behalte diese sekundäre Instanz solange, bis ein anderes Geofence-Ereignis auftritt.

Dies wird mir helfen, detailliertere Standortdaten zu erhalten, wo ich brauche, ohne dass die Standortdienste immer offen bleiben.

Meine Frage ist, ich weiß nicht, ob mein Ansatz in iOS möglich ist. In jedem Fall von Geofence wird meine App am liebsten im Hintergrund sein. Kann ich den sekundären CLLocationManager noch starten und stoppen?

Ich habe bereits Hintergrundmodi für Standortaktualisierungen aktiviert, es funktioniert gut in der aktuellen Version.

Vielen Dank im Voraus.

Antwort

0

Ich glaube nicht, dass Sie separate CLLocationManager-Instanzen benötigen. Mein Verständnis (und meine Erfahrung) besteht darin, dass Geofencing- und Standortaktualisierungen im selben CLLocationManager koexistieren können.

Ihre App Lage Ereignisse im Hintergrund reagieren können, z.B .:

In AppDelegate.swift:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    // Override point for customization after application launch. 

    // were we invoked due to LocationManager event: 
    if launchOptions?[UIApplicationLaunchOptionsLocationKey] != nil { 
     printLog("UIApplicationLaunchOptionsLocationKey") 

     // We were previously terminated/suspended and need to configure locmgr 
     // etc. 
     // after this, app will process received location events via 
     // didUpdateLocations() 
     // didExitRegions()