如何解决CLLocationManager() requestWhenInUseAuthorization() 在模拟器上出现和消失,在实际设备上不出现
我想知道用户的当前位置。但由于我想从多个位置获取此位置,因此我为其创建了一个函数,而不是将特定的 UIViewController
设置为委托处理程序。
func getUserLocation(completion: @escaping (String?) -> Void) {
let locationManager = CLLocationManager()
let geoCoder = CLGeocoder()
let authorizationStatus = CLLocationManager.authorizationStatus()
print("Authorization status: ",authorizationStatus.rawValue,",CLAuthorizationStatus.notDetermined.rawValue)
if authorizationStatus == CLAuthorizationStatus.notDetermined {
print("Asking for location authorization")
locationManager.requestWhenInUseAuthorization()
}
if authorizationStatus == CLAuthorizationStatus.denied {
completion(nil)
}
if authorizationStatus == CLAuthorizationStatus.authorizedWhenInUse || authorizationStatus == CLAuthorizationStatus.authorizedAlways {
if CLLocationManager.locationServicesEnabled() {
guard let currentLocation = locationManager.location else { return completion(nil) }
geoCoder.reverseGeocodeLocation(currentLocation) { (placemarks,error) in
guard let currentLocPlacemark = placemarks?.first else { return completion(nil) }
print(currentLocPlacemark.country ?? "No country found")
print(currentLocPlacemark.isoCountryCode ?? "No country code found")
guard let isoCode = currentLocPlacemark.isoCountryCode else { return completion(nil) }
completion(isoCode)
}
}
}
}
func incrementLocationInFirebase() {
getUserLocation { (location) in
if let location = location {
//Save Location to Firebase
print("Location: ",location)
}
}
}
func decrementLocationInFirebase() {
// Fetch saved location
// Decrement from firebase
}
我已经设置了 2 个描述字符串:
- 隐私 - 位置使用说明
- 隐私 - 使用时的位置使用说明
我从 incrementLocationInFirebase()
的主视图控制器调用 viewDidAppear
。位置请求在消失之前会在模拟器上短暂弹出。但是当它短暂可见时,弹出窗口是不可交互的。它永远不会出现在实际设备上。
模拟器输出:
解决方法
原来我遇到了与这篇文章相同的问题:Alert view disappears on its own when calling [locationManager requestWhenInUseAuthorization];。
现在我在主 UIViewController
中创建位置管理器并将其传递给处理函数。
func getUserLocation(locationManager: CLLocationManager,completion: @escaping (String?) -> Void) {
// let locationManager = CLLocationManager()
let geoCoder = CLGeocoder()
let authorizationStatus = CLLocationManager.authorizationStatus()
print("Authorization status: ",authorizationStatus.rawValue,",CLAuthorizationStatus.notDetermined.rawValue)
if authorizationStatus == CLAuthorizationStatus.notDetermined {
print("Asking for location authorization")
locationManager.requestWhenInUseAuthorization()
}
if authorizationStatus == CLAuthorizationStatus.denied {
completion(nil)
}
if authorizationStatus == CLAuthorizationStatus.authorizedWhenInUse || authorizationStatus == CLAuthorizationStatus.authorizedAlways {
if CLLocationManager.locationServicesEnabled() {
guard let currentLocation = locationManager.location else { return completion(nil) }
geoCoder.reverseGeocodeLocation(currentLocation) { (placemarks,error) in
guard let currentLocPlacemark = placemarks?.first else { return completion(nil) }
print(currentLocPlacemark.country ?? "No country found")
print(currentLocPlacemark.isoCountryCode ?? "No country code found")
guard let isoCode = currentLocPlacemark.isoCountryCode else { return completion(nil) }
completion(isoCode)
}
}
}
}
func incrementLocationInFirebase(locationManager: CLLocationManager) {
getUserLocation(locationManager: locationManager) { (location) in
if let location = location {
//Save Location to Firebase
print("Location: ",location)
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。