如何在授予ios的位置权限后执行任务

时间:2016-07-07 18:21:59

标签: ios swift permissions grand-central-dispatch cllocationmanager

我正在尝试设置一个登机牌,我要求用户提供一些权限,包括:位置,通知和相机。我设置了3个不同的视图控制器,每个都要求其中一个权限并解释原因。在每个视图控制器上,我在底部有一个按钮,显示“授予权限”。

当用户点击按钮时,我希望弹出权限对话框,一旦用户点击允许,我想转换到下一个视图控制器。

这就是我现在所拥有的:

class OnboardingStep2:UIViewController{

    override func viewDidLoad() {
        self.view.backgroundColor = StyleKit.orangeWhite()
    }

    @IBAction func getPermission(sender: AnyObject) {

        dispatch_sync(dispatch_get_main_queue()) {
            let locManager = CLLocationManager()
            locManager.requestAlwaysAuthorization()

        }

        if (CLLocationManager.authorizationStatus() == CLAuthorizationStatus.Authorized) {
            self.performSegueWithIdentifier("goToStep3", sender: self)
        }

    }
}

我尝试使用dispatch排队任务,但是当使用异步时,会弹出权限对话框,然后立即关闭,因为授权检查已经运行(我假设)。使用dispatch_sync,永远不会显示对话框。

执行此操作的最佳方法是什么,我希望首先弹出权限对话框,一旦用户点击允许我想要删除。

1 个答案:

答案 0 :(得分:3)

符合CLLocationManagerDelegate

然后打电话给:

Swift 3.0

func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
    switch status {
    case .notDetermined:
        manager.requestLocation()
    case .authorizedAlways, .authorizedWhenInUse:
        // Do your thing here
    default:
        // Permission denied, do something else
    }
}

Swift 2.2

func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
    switch status {
    case .NotDetermined:
        manager.requestLocation()
    case .AuthorizedAlways, .AuthorizedWhenInUse:
        // Do your thing here
    default:
        // Permission denied, do something else
    }
}