gpt4 book ai didi

ios - 仅显示一个位置权限警报

转载 作者:行者123 更新时间:2023-11-30 12:32:26 27 4
gpt4 key购买 nike

我希望我的应用程序在事件和后台模式下获取位置(如果仅使用 NSLocationAlwaysUsageDescription 权限,则 myLocationButton 不会显示)。我在Info.plist中设置:

<key>NSLocationAlwaysUsageDescription</key>
<string>$(PRODUCT_NAME) location use</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>$(PRODUCT_NAME) location use</string>
<key>UIBackgroundModes</key>

并添加MapViewController

self.locationManager.requestWhenInUseAuthorization()
self.locationManager.requestAlwaysAuthorization()

但是当应用程序启动时,只显示第一个位置权限警报,重新打开应用程序后会出现第二个权限警报。

更新:

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
}

最佳答案

将此委托(delegate)添加到您的类(class)中:

CLLocationManagerDelegate

现在在你的类里面:

var locationManager:CLLocationManager!
var map = GMSMapView()
var currentLatitude:Double!
var currentLongitude:Double!

之后将其添加到您的代码中:

override func loadView() {

print("loadView called")

// Enable some map settings

map.isMyLocationEnabled = true
map.settings.myLocationButton = true
map.settings.compassButton = true
map.settings.scrollGestures = true
map.settings.zoomGestures = true
map.delegate = self

view = map
}

override func viewDidLoad() {

super.viewDidLoad()

print("ViewDidLoad called")

// Configuring location manager.

locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.requestAlwaysAuthorization()
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.startUpdatingLocation()
locationManager.startMonitoringSignificantLocationChanges()
}

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

print("locationManager function called")

// Fetch current location coordinates

let locValue:CLLocationCoordinate2D = (locationManager.location?.coordinate)!
currentLatitude = locValue.latitude
currentLongitude = locValue.longitude
print("Current Location = \(currentLatitude!), \(currentLongitude!)")

// Zoom to current location

let target = CLLocationCoordinate2D(latitude: currentLatitude!, longitude: currentLongitude!)
map.camera = GMSCameraPosition.camera(withTarget: target, zoom: 17)

locationManager.stopUpdatingLocation()

}

添加此代码后,右键单击您的 Info.plist 并选择“作为源代码打开”。将其添加到您的 Info.plist 中。

<key>LSApplicationQueriesSchemes</key>
<array>
<string>googlechromes</string>
<string>comgooglemaps</string>
</array>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSBluetoothPeripheralUsageDescription</key>
<string></string>
<key>NSCameraUsageDescription</key>
<string></string>
<key>NSContactsUsageDescription</key>
<string></string>
<key>NSLocationUsageDescription</key>
<string></string>
<key>NSLocationWhenInUseUsageDescription</key>
<string></string>
<key>NSLocationAlwaysUsageDescription</key>
<string></string>
<key>NSMicrophoneUsageDescription</key>
<string></string>
<key>NSMotionUsageDescription</key>
<string></string>
<key>NSPhotoLibraryUsageDescription</key>
<string></string>
<key>NSRemindersUsageDescription</key>
<string></string>
<key>NSSiriUsageDescription</key>
<string></string>
<key>NSSpeechRecognitionUsageDescription</key>
<string></string>
<key>NSVideoSubscriberAccountUsageDescription</key>
<string></string>

关于ios - 仅显示一个位置权限警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43342146/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com