【问题标题】:OS X save location permissionOS X 保存位置权限
【发布时间】:2016-03-16 11:49:15
【问题描述】:

我正在像这样获取用户 GPS 位置:

var manager:CLLocationManager!

override func viewDidLoad() {
    super.viewDidLoad()

    manager = CLLocationManager()
    manager.delegate = self
    manager.desiredAccuracy = kCLLocationAccuracyBest
    manager.startUpdatingLocation()
    //manager.requestAlwaysAuthorization()
    //manager.requestWhenInUseAuthorization()

}

func locationManager(manager:CLLocationManager, didUpdateLocations locations:    [AnyObject]) { // Updated to current array syntax [AnyObject] rather than  AnyObject[]
    println("locations = \(locations)")
}

os x 应用程序似乎不存在注释掉的函数。它仍然对我有用,所以没关系。

但每次我运行代码时,它都会请求使用位置的权限。 是否可以将权限存储在某处,所以它只在第一次执行时询问?

【问题讨论】:

    标签: swift macos cocoa location cllocationmanager


    【解决方案1】:

    引用苹果的documentation

    调用authorizationStatus类方法获取应用当前的授权状态。

    如果授权状态为kCLAuthorizationStatusRestrictedkCLAuthorizationStatusDenied,则您的应用不允许使用定位服务,您应该放弃使用它们的尝试。

    您在 OS X 上的代码应如下所示:

    override func viewDidLoad() {
        super.viewDidLoad()
    
        let status = CLLocationManager.authorizationStatus()
        if status == .Restricted || status == .Denied {
            // User permission not given
            return
        }
        
        manager = CLLocationManager()
        manager.delegate = self
        manager.desiredAccuracy = kCLLocationAccuracyBest
        manager.startUpdatingLocation()
    }
    

    权限由 Mac OS X 集中管理。第一次调用 startUpdatingLocation 时,它会请求权限,然后记住用户的决定。

    【讨论】:

    • return 把我踢出了 viewDidLoad 函数,对吗?如果我想在这个函数中做其他事情,我应该把 if 留空并将所有管理器函数放在 else 中吗?
    • 是的,将位置调用放入else
    猜你喜欢
    • 2018-07-05
    • 2012-02-21
    • 2015-06-29
    • 1970-01-01
    • 2017-01-11
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多