尝试在Swift中获取用户的经度和纬度时,我遇到了一个问题。我有一个按钮,它运行一个函数来获取用户的坐标,第一次按下它时,它应该请求允许给应用程序你的位置。但是,我遇到的问题是,在按下获取位置按钮后,此弹出窗口将自动关闭。
这是我的代码:
sleep(5)
答案 0 :(得分:0)
这里有一些适合我的代码。需要注意的一些事项:
CLLocationManager
。如果用户没有启用CoreLocation,那么他们将在创建位置管理器时收到警报,这可能是您的应用启动时(可能是您想要的,也可能不是)。 requestAlwaysAuthorization
在Info.plist中需要[NSLocationAlwaysUsageDescription][1]
条目。locationManager:didChangeAuthorizationStatus:
并在服务不可用时停止位置管理器。 代码:
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)
当出现位置权限弹出窗口时,您不应再访问位置。您只需等待用户权限,而不是继续使用与位置相关的功能。