Je veux que ma demande de prendre position dans les modes actifs et de fond (si l'utilisation ne NSLocationAlwaysUsageDescription la permission alors myLocationButton ne montre pas). Je réglerai Info.plist:ne montre qu'une seule autorisation Lieu alerte
<key>NSLocationAlwaysUsageDescription</key>
<string>$(PRODUCT_NAME) location use</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>$(PRODUCT_NAME) location use</string>
<key>UIBackgroundModes</key>
Et ajouter MapViewController
self.locationManager.requestWhenInUseAuthorization()
self.locationManager.requestAlwaysAuthorization()
Mais quand l'application démarre, seule la première alerte d'autorisation de localisation est affiché, et la seconde alerte d'autorisation apparaît après l'application est rouvert.
Mise à jour:
override func viewDidLoad() {
super.viewDidLoad()
...
locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()
viewMap.addObserver(self, forKeyPath: "myLocation", options: NSKeyValueObservingOptions.new, context: nil)
self.startLocationUpdates()
...
}
func startLocationUpdates() {
self.locationManager.delegate = self
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
self.locationManager.activityType = CLActivityType.automotiveNavigation
self.locationManager.distanceFilter = distanceFilterMetr
self.locationManager.requestAlwaysAuthorization()
self.locationManager.startUpdatingLocation()
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
let myLocation: CLLocation = change?[NSKeyValueChangeKey.newKey] as! CLLocation
viewMap.camera = GMSCameraPosition.camera(withTarget: myLocation.coordinate, zoom: observeZoom)
mapRoute.coordinateLatitude = myLocation.coordinate.latitude
mapRoute.coordinateLongitude = myLocation.coordinate.longitude
viewMap.delegate = self
viewMap.settings.myLocationButton = true
viewMap.settings.compassButton = true
didFindMyLocation = true
}
Vous avez seulement besoin de demander une autorisation "always". Cela permet à votre application d'utiliser l'emplacement au premier plan et l'arrière-plan. – Paulw11
@ Paulw11 J'écris à propos de si utilisation seulement NSLocationAlwaysUsageDescription permission puis myLocationButton ne montrent pas (mise à jour de la position, mais le bouton ne montre pas) iOS 10.3 swift 3 – Roman
Comment décidez-vous si vous souhaitez afficher ce bouton? Je peux vous assurer que l'authentification Always est tout ce qui est nécessaire pour l'emplacement de premier plan et d'arrière-plan. – Paulw11