定位服務(wù)基本流程
1.服務(wù)開(kāi)關(guān):判斷系統(tǒng)是否開(kāi)啟定位服務(wù)
BOOL isLocation = [CLLocationManager locationServicesEnabled];
2.權(quán)限申請(qǐng):開(kāi)啟定位服務(wù)有4中方式 永不杉适、使用時(shí)、總是、下次詢問(wèn)
獲取狀態(tài)是下次詢問(wèn)開(kāi)啟鲜侥,則去申請(qǐng)開(kāi)啟權(quán)限
self.manager = [[CLLocationManager alloc] init];
if([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined){
[self.manager requestWhenInUseAuthorization];
}
3.權(quán)限更新:當(dāng)定位服務(wù)狀態(tài)改變則調(diào)用下面代理方法 這個(gè)需要遵循代理協(xié)議CLLocationManagerDelegate
并實(shí)現(xiàn)代理方法
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{
if (status == kCLAuthorizationStatusAuthorizedWhenInUse) {
//位置信息獲取
[self.manager startUpdatingLocation];
}else if (status == kCLAuthorizationStatusDenied){
//定位服務(wù)關(guān)閉
}
}
4.開(kāi)始位置信息獲取
[self.manager startUpdatingLocation];
5.位置信息返回 系統(tǒng)調(diào)用代理方法
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray<CLLocation *> *)locations {
//地理信息
CLLocation *location = [locations firstObject];
CLGeocoder *coder = [[CLGeocoder alloc] init];
[coder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
//地標(biāo)信息
}];
[self.manager stopUpdatingLocation];
}
CLLocation
某個(gè)位置的地理信息(經(jīng)度/ 緯度 / 海拔 ...)CLPlacemark
地標(biāo)信息(省市街道...)CLGeocoder
提供CLLocation和CLGeocoder之間的轉(zhuǎn)換
通過(guò)CLGeocoder實(shí)例調(diào)用reverseGeocodeLocation:completionHandler:獲取回調(diào)得到CLPlacemark最后要關(guān)閉位置信息服務(wù)
其他定位相關(guān)服務(wù)
- 位置變化 / 運(yùn)動(dòng)軌跡 / 速度
- 后臺(tái)定位服務(wù)
- MapKit