2015-10-28 22 views
2

我剛剛關注了http://www.raywenderlich.com/92428/background-modes-ios-swift-tutorial位置更新部分。iOS背景模式位置更新 - 管理器不會在後臺模式下更新

但管理員不在後臺模式下打印位置信息。

然後,管理員在應用程序進入前臺時將日誌打印到Xcode控制檯。

此編碼是正確的?

import UIKit 
import CoreLocation 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate, CLLocationManagerDelegate { 

var window: UIWindow? 
var manager = CLLocationManager() 


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

    manager.desiredAccuracy = kCLLocationAccuracyBest 
    manager.delegate = self 
    manager.requestAlwaysAuthorization() 
    manager.startUpdatingLocation() 

    return true 
} 

func locationManager(manager: CLLocationManager, didUpdateToLocation newLocation: CLLocation, fromLocation oldLocation: CLLocation) { 
    if UIApplication.sharedApplication().applicationState != .Active { 
     NSLog("App is backgrounded. New location is %@", newLocation) 
    } 
} 
..... 

} 
+0

是否啓用了位置更新的背景模式 –

+0

@ Anbu.Karthik是的。我打開了「功能設置」。 –

+0

你註冊在你的plist應用程序註冊的位置更新 –

回答

9

我得到了我自己的答案。

如果在iOS 9.0或更高版本上運行你的應用程序,並要在後臺運行的位置服務應用,

你必須allowsBackgroundLocationUpdates變量設置爲true。

所以這裏是我的代碼。

import UIKit 
import CoreLocation 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate, CLLocationManagerDelegate { 

var window: UIWindow? 
var manager = CLLocationManager() 


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

    manager.desiredAccuracy = kCLLocationAccuracyBest 
    manager.delegate = self 
    manager.requestAlwaysAuthorization() 
    manager.startUpdatingLocation() 
    if #available(iOS 9.0, *){ 
     manager.allowsBackgroundLocationUpdates = true 
    } 

    return true 
} 

func locationManager(manager: CLLocationManager, didUpdateToLocation newLocation: CLLocation, fromLocation oldLocation: CLLocation) { 
    if UIApplication.sharedApplication().applicationState != .Active { 
     NSLog("App is backgrounded. New location is %@", newLocation) 
    } 
} 
..... 

} 
+0

是不是didUpdateToLocation棄用? –

+0

男人,你是最棒的。我一直在努力拼搏兩天,但是你的答案在一瞬間就解決了。謝謝! – mrvn