问题描述
我试图在我的iOS应用中使用位置服务,但是由于某些原因 requestWhenInUseAuthorization
无法正常工作。当用户第一次使用该应用程序时,会出现提示正常的提示,但随后当您再次打开该应用程序时,由于某种原因未调用 didChangeAuthorizationStatus
方法,因此我无法在地图上显示用户的当前位置。
I am trying to use location services in my iOS app but for some reason requestWhenInUseAuthorization
is not working. When the user first uses the app, the prompt comes up as normal asking for permissions but then when you open the app a second time, for some reason didChangeAuthorizationStatus
method is not called so I cannot display the user current location on the map.
我的代码如下:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib
locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()
var config:NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()
config.URLCache = NSURLCache(memoryCapacity: 2 * 1024 * 1024, diskCapacity: 10 * 1024 * 1024, diskPath: "MarkerData")
markerSession = NSURLSession(configuration: config)
}
func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
if status == .AuthorizedWhenInUse {
locationManager.startUpdatingLocation()
mapView.delegate = self
mapView.myLocationEnabled = true
mapView.settings.myLocationButton = true
}
}
推荐答案
首先,您需要添加您的info.plist文件中的NSLocationWhenInUseUsageDescription
或 NSLocationAlwaysUsageDescription
(如果要在后台使用)。参见下图:
First you need to add NSLocationWhenInUseUsageDescription
or NSLocationAlwaysUsageDescription
(if you want to use in background) in your info.plist file. See the following image:
接下来,在您的快捷文件中,您需要调用 locationManager.requestWhenInUseAuthorization()
或 locationManager.requestAlwaysAuthorization()
在您的 viewDidLoad()
方法中。
Next, in your swift file, you need to call either locationManager.requestWhenInUseAuthorization()
or locationManager.requestAlwaysAuthorization()
in your viewDidLoad()
method.
最后,您可以执行 mapView.camera = GMSCameraPosition(target:locations.last!.coordinate,zoom:15,方位:0, viewAngle:0)
在您的locationManager委托方法中。
Finally, you can do a mapView.camera = GMSCameraPosition(target: locations.last!.coordinate, zoom: 15, bearing: 0, viewingAngle: 0)
in your locationManager delegate method.
示例代码:
class ViewController: UIViewController, CLLocationManagerDelegate {
var locationManager = CLLocationManager();
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
var camera = GMSCameraPosition.cameraWithLatitude(-33.86,
longitude: 151.20, zoom: 6)
var mapView = GMSMapView.mapWithFrame(CGRectZero, camera: camera)
mapView.myLocationEnabled = true
self.view = mapView
locationManager.delegate = self
locationManager.distanceFilter = kCLDistanceFilterNone
locationManager.desiredAccuracy = kCLLocationAccuracyBest
if #available(iOS 8.0, *) {
print("iOS >= 8.0.0")
locationManager.requestAlwaysAuthorization()
}
locationManager.startUpdatingLocation()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
println(locations.last)
var mapView = self.view as! GMSMapView
mapView.camera = GMSCameraPosition(target: locations.last!.coordinate, zoom: 15, bearing: 0, viewingAngle: 0)
}
}
您可以,了解有关iOS 8中LocationManager更改的更多详细信息。
You can will this post, for more details about LocationManager change in iOS 8.
这篇关于CLLocationManager requestWhenInUseAuthorization()不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!