Swift:位置权限弹出窗口保持关闭状态

时间:2016-07-10 00:41:33

标签: ios xcode swift location cllocation

尝试在Swift中获取用户的经度和纬度时,我遇到了一个问题。我有一个按钮,它运行一个函数来获取用户的坐标,第一次按下它时,它应该请求允许给应用程序你的位置。但是,我遇到的问题是,在按下获取位置按钮后,此弹出窗口将自动关闭。

以下是:http://imgur.com/a/0wdnm

这是我的代码:

sleep(5)

2 个答案:

答案 0 :(得分:0)

这里有一些适合我的代码。需要注意的一些事项:

  1. 只在您确实需要使用它时才创建CLLocationManager。如果用户没有启用CoreLocation,那么他们将在创建位置管理器时收到警报,这可能是您的应用启动时(可能是您想要的,也可能不是)。
  2. requestAlwaysAuthorization在Info.plist中需要[NSLocationAlwaysUsageDescription][1]条目。
  3. 观察locationManager:didChangeAuthorizationStatus:并在服务不可用时停止位置管理器。
  4. 代码:

    import UIKit
    import CoreLocation
    
    class LocationViewController: UIViewController, CLLocationManagerDelegate {
    
        var locationManager: CLLocationManager?
    
        internal func getLocation() {
    
            if locationManager == nil {
    
                locationManager = CLLocationManager()
                locationManager?.delegate = self
                locationManager?.desiredAccuracy = kCLLocationAccuracyBest
            }
    
            if CLLocationManager.authorizationStatus() == .AuthorizedAlways {
                locationManager?.startUpdatingLocation()
            } else if CLLocationManager.authorizationStatus() == .NotDetermined {
                locationManager?.requestAlwaysAuthorization()
            } else if CLLocationManager.authorizationStatus() == .Denied {
                print("User denied location permissions.")
            }
        }
    
    
        // MARK : CLLocationManagerDelegate protocol
    
        func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
    
            switch status {
    
            case .AuthorizedAlways, .AuthorizedWhenInUse:
                locationManager?.startUpdatingLocation()
    
            default:
                locationManager?.stopUpdatingLocation()
            }
        }
    
        @objc func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    
            guard let location = locationManager?.location?.coordinate else {
                return
            }
    
            print(location.latitude)
            print(location.longitude)
        }
    }
    
    extension LocationViewController {
    
        @IBAction internal func buttonTapped(sender: AnyObject) {
    
            getLocation()
        }
    }
    

答案 1 :(得分:0)

当出现位置权限弹出窗口时,您不应再访问位置。您只需等待用户权限,而不是继续使用与位置相关的功能。