您好,登錄后才能下訂單哦!
引用: import CoreLocation
// 如果是ios8.0以后, 在想請求用戶的位置信息, 需要主動的請求授權, 系統(tǒng)不會再自動彈出一個窗口
lazy var locationM: CLLocationManager = {
let locationM = CLLocationManager()
locationM.delegate = self
// 請求的是前臺定位授權
// 默認情況, 只能在前臺獲取用戶位置信息 如果想想要在后臺也獲取用戶位 那么必須勾選后臺模式location updates
// 效果 在后臺確實可以獲取到位置信息, 但是屏幕上方會出現(xiàn)一個藍色的橫幅, 不斷提醒用戶, 當前APP 正在使用你的位置
if #available(iOS 8.0, *) {
locationM.requestWhenInUseAuthorization()
// 如果在ios9.0以后, 想要在后臺獲取用戶位置,
// 如果當前的授權狀態(tài)是前臺定位授權, 那么你需要勾選后臺模式 location updates, 還要額外的設置以下屬性為true
// 注意: 如果設置這個屬性為true, 那么必須勾選后臺模式
if #available(iOS 9.0, *) {
locationM.allowsBackgroundLocationUpdates = true
}
// 前后臺定位授權
// 如果當前的授權狀態(tài)是前后臺定位授權, 那么默認情況下, 就可以在后臺獲取用戶位置信息, 不需要勾選后臺模式location updates
// locationM.requestAlwaysAuthorization()
}
// 設置過濾距離
// 每隔100米定位一次
// 1 111KM/100M
// 如果最新的位置距離上一次的位置之間的物理距離, 大于這個值, 就會通過代理來告訴我們最新的位置數(shù)據(jù)
locationM.distanceFilter = 100
// 定位精確度
// kCLLocationAccuracyBestForNavigation // 最適合導航
// kCLLocationAccuracyBest; // 最好的
// kCLLocationAccuracyNearestTenMeters; // 附近10米
// kCLLocationAccuracyHundredMeters; // 附近100米
// kCLLocationAccuracyKilometer; // 附近1000米
// kCLLocationAccuracyThreeKilometers; // 附近3000米
// 經(jīng)驗: 如果定位的精確度越高, 那么越耗電, 而且定位時間越長
//
locationM.desiredAccuracy = kCLLocationAccuracyBest
return locationM
}()
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
locationM.startUpdatingLocation()
}
}
extension ViewController: CLLocationManagerDelegate {
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
print("已經(jīng)獲取到位置信息")
// 獲取用戶當前所在的城市, 切換到奧對應城市 1
// 如果想要定位一次, 那么可以在定位到之后, 停止定位
// locationM.stopUpdatingLocation()
}
/**
授權狀態(tài)發(fā)生改變時調(diào)用
- parameter manager: 位置管理者
- parameter status: 狀態(tài)
*/
func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
switch status {
case .NotDetermined:
print("用戶沒有決定")
case .Restricted:
print("受限制")
case .AuthorizedWhenInUse:
print("前臺定位授權")
case .AuthorizedAlways:
print("前后臺定位授權")
case .Denied:
// print("拒絕")
// 判斷當前設備是否支持定位, 并且定位服務是否開啟
if CLLocationManager.locationServicesEnabled() {
print("真正被拒絕")
// 手動通過代碼, 來跳轉(zhuǎn)到設置界面
if #available(iOS 8.0, *) {
let url = NSURL(string: UIApplicationOpenSettingsURLString)
if UIApplication.sharedApplication().canOpenURL(url!) {
UIApplication.sharedApplication().openURL(url!)
}
}
}else {
// 當我們在app內(nèi)部想要訪問用戶位置, 但是當前的定位服務是關閉狀態(tài), 那么系統(tǒng)會自動彈出一個窗口, 快捷跳轉(zhuǎn)到設置界面, 讓用戶設置
print("定位服務應該打開")
}
default:
print("none")
}
}
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。