新聞中心
引用: import CoreLocation
10年積累的成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有精河免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
//如果是ios8.0以后,在想請(qǐng)求用戶的位置信息,需要主動(dòng)的請(qǐng)求授權(quán),系統(tǒng)不會(huì)再自動(dòng)彈出一個(gè)窗口
lazy var locationM: CLLocationManager = {
let locationM = CLLocationManager()
locationM.delegate = self
// 請(qǐng)求的是前臺(tái)定位授權(quán)
//默認(rèn)情況,只能在前臺(tái)獲取用戶位置信息如果想想要在后臺(tái)也獲取用戶位那么必須勾選后臺(tái)模式location updates
//效果在后臺(tái)確實(shí)可以獲取到位置信息,但是屏幕上方會(huì)出現(xiàn)一個(gè)藍(lán)色的橫幅,不斷提醒用戶,當(dāng)前APP正在使用你的位置
if #available(iOS 8.0, *) {
locationM.requestWhenInUseAuthorization()
// 如果在ios9.0以后, 想要在后臺(tái)獲取用戶位置,
// 如果當(dāng)前的授權(quán)狀態(tài)是前臺(tái)定位授權(quán), 那么你需要勾選后臺(tái)模式 location updates, 還要額外的設(shè)置以下屬性為true
// 注意: 如果設(shè)置這個(gè)屬性為true, 那么必須勾選后臺(tái)模式
if #available(iOS 9.0, *) {
locationM.allowsBackgroundLocationUpdates =true
}
//前后臺(tái)定位授權(quán)
//如果當(dāng)前的授權(quán)狀態(tài)是前后臺(tái)定位授權(quán),那么默認(rèn)情況下,就可以在后臺(tái)獲取用戶位置信息,不需要勾選后臺(tái)模式location updates
// locationM.requestAlwaysAuthorization()
}
// 設(shè)置過濾距離
// 每隔100米定位一次
// 1 111KM/100M
//如果最新的位置距離上一次的位置之間的物理距離,大于這個(gè)值,就會(huì)通過代理來告訴我們最新的位置數(shù)據(jù)
locationM.distanceFilter = 100
// 定位精確度
// kCLLocationAccuracyBestForNavigation // 最適合導(dǎo)航
// kCLLocationAccuracyBest; // 最好的
// kCLLocationAccuracyNearestTenMeters; // 附近10米
// kCLLocationAccuracyHundredMeters; // 附近100米
// kCLLocationAccuracyKilometer; // 附近1000米
// kCLLocationAccuracyThreeKilometers; // 附近3000米
//經(jīng)驗(yàn):如果定位的精確度越高,那么越耗電,而且定位時(shí)間越長
//
locationM.desiredAccuracy =kCLLocationAccuracyBest
return locationM
}()
override func touchesBegan(touches: Set
locationM.startUpdatingLocation()
}
}
extensionViewController:CLLocationManagerDelegate {
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
print("已經(jīng)獲取到位置信息")
//獲取用戶當(dāng)前所在的城市,切換到奧對(duì)應(yīng)城市 1
//如果想要定位一次,那么可以在定位到之后,停止定位
// locationM.stopUpdatingLocation()
}
/**
授權(quán)狀態(tài)發(fā)生改變時(shí)調(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("前臺(tái)定位授權(quán)")
case .AuthorizedAlways:
print("前后臺(tái)定位授權(quán)")
case .Denied:
// print("拒絕")
//判斷當(dāng)前設(shè)備是否支持定位,并且定位服務(wù)是否開啟
ifCLLocationManager.locationServicesEnabled() {
print("真正被拒絕")
// 手動(dòng)通過代碼, 來跳轉(zhuǎn)到設(shè)置界面
if #available(iOS 8.0, *) {
let url =NSURL(string:UIApplicationOpenSettingsURLString)
if UIApplication.sharedApplication().canOpenURL(url!) {
UIApplication.sharedApplication().openURL(url!)
}
}
}else {
//當(dāng)我們?cè)赼pp內(nèi)部想要訪問用戶位置,但是當(dāng)前的定位服務(wù)是關(guān)閉狀態(tài),那么系統(tǒng)會(huì)自動(dòng)彈出一個(gè)窗口,快捷跳轉(zhuǎn)到設(shè)置界面,讓用戶設(shè)置
print("定位服務(wù)應(yīng)該打開")
}
default:
print("none")
}
}
網(wǎng)站題目:001.Swift定位CLLocationManager
轉(zhuǎn)載注明:http://www.ef60e0e.cn/article/gpchss.html