2015-12-30 10 views
5

Sto cercando di ottenere aggiornamenti sulla posizione anche in tutti gli stati, anche quando l'app viene uccisa/interrotta/sospesa. Ho abilitato il recupero dello sfondo in xcode e implementato il seguente codice (riferimento usato "Capture location in all states app"). Ma quando chiudo l'app, sta dando una riga rossa sulla classe AppDelegate. Non capisco qual è il problema qui. Ho fatto questo usando la soluzione della domanda "Getting location for an iOS app when it is in the background and even killed" qui, ma non funziona in iOS 9.Si prega di darmi una mano o di dirmi l'altra soluzione.Aggiornamento della posizione anche quando l'app viene uccisa/terminata

codice aggiornato -

class AppDelegate: UIResponder, UIApplicationDelegate, CLLocationManagerDelegate { 

var window: UIWindow? 
var locationManager: CLLocationManager? 
var significatLocationManager : CLLocationManager? 

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool { 
    if(UIApplication.sharedApplication().backgroundRefreshStatus == UIBackgroundRefreshStatus.Available){ 
     print("yessssss") 
    }else{ 
     print("noooooo") 
    } 

    if let launchOpt = launchOptions{ 
     if (launchOpt[UIApplicationLaunchOptionsLocationKey] != nil) { 
      self.significatLocationManager = CLLocationManager() 
      self.significatLocationManager?.delegate = self 
      self.significatLocationManager?.requestAlwaysAuthorization() 
      if #available(iOS 9.0, *) { 
       self.significatLocationManager!.allowsBackgroundLocationUpdates = true 
      } 
      self.significatLocationManager?.startMonitoringSignificantLocationChanges() 

     }else{ 

      self.locationManager   = CLLocationManager() 
      self.locationManager?.delegate = self 
      self.locationManager?.requestAlwaysAuthorization() 
      if #available(iOS 9.0, *) { 
       self.locationManager!.allowsBackgroundLocationUpdates = true 
      } 

      self.locationManager?.startMonitoringSignificantLocationChanges() 
     } 

    }else{ 

     self.locationManager   = CLLocationManager() 
     self.locationManager?.delegate = self 
     self.locationManager?.requestAlwaysAuthorization() 
     if #available(iOS 9.0, *) { 
      self.locationManager!.allowsBackgroundLocationUpdates = true 
     } 

     self.locationManager?.startMonitoringSignificantLocationChanges() 

    } 

    return true 
} 



func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]){ 

    let locationArray = locations as NSArray 
    let locationObj = locationArray.lastObject as! CLLocation 
    let coord = locationObj.coordinate 
     } 


func applicationDidEnterBackground(application: UIApplication) { 

    if self.significatLocationManager != nil { 

     self.significatLocationManager?.startMonitoringSignificantLocationChanges() 
    }else{ 

     self.locationManager?.startMonitoringSignificantLocationChanges() 
    } 


} 
+1

Possibile duplicato: http://stackoverflow.com/questions/30396367/getting-location-for-an-ios-app-when-it-is-in-background -and-even-killed –

+1

* "sta dando una linea rossa sulla classe AppDelegate" * - che è la peggiore e meno utile descrizione degli errori. Si prega di inviare il messaggio di errore qui. Se hai eseguito la tua app tramite Xcode, è normale che venga visualizzata la "linea rossa" se interrompi forzatamente l'app. – luk2302

+0

Sì, interrompo con forza l'app e viene visualizzato questo errore di linea rossa, ma non ricevo l'aggiornamento della posizione sull'app di chiusura. Qual è il problema qui? – Kirti

risposta

0

controllare questo tutorial: http://mobileoop.com/getting-location-updates-for-ios-7-and-8-when-the-app-is-killedterminatedsuspended

e il codice sorgente qui: https://github.com/voyage11/GettingLocationWhenSuspended

auguriamo che ottenere la vostra risposta. Funziona per me. Ora sto cercando di effettuare una richiesta http quando viene chiamata la funzione 'didUpdateLocations', in modo da poter memorizzare la posizione corrente dell'utente nel server quando l'app non è in esecuzione (sospesa/terminata/interrotta).

Non credo che Apple abbia consentito di effettuare alcuna richiesta http quando l'app è sospesa/terminata. Ma se il server ha ricevuto la richiesta di aggiornamento della posizione, allora sono a posto. Perché non ho bisogno di una risposta dal server. Hai bisogno di un sacco di test ....

Problemi correlati