一、需求
获取用户当前所在位置的经纬度。
二、实现过程
拟采用CLLocationManager类获取用户位置信息,所需步骤
1、导入CoreLocation.frameWork
2、通过CLLocationManager类获取位置信息
三、代码
#
import
"TestViewController.h"
@implementation
TestViewController
#pragma mark - view life cycle
- (
void
)viewDidLoad
{
[
super
viewDidLoad];
// example
// 实例化一个位置管理器
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
// 设置定位精度
// kCLLocationAccuracyNearestTenMeters:精度10米
// kCLLocationAccuracyHundredMeters:精度100 米
// kCLLocationAccuracyKilometer:精度1000 米
// kCLLocationAccuracyThreeKilometers:精度3000米
// kCLLocationAccuracyBest:设备使用电池供电时候最高的精度
// kCLLocationAccuracyBestForNavigation:导航情况下最高精度,一般要有外接电源时才能使用
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
// distanceFilter是距离过滤器,为了减少对定位装置的轮询次数,位置的改变不会每次都去通知委托,而是在移动了足够的距离时才通知委托程序
// 它的单位是米,这里设置为至少移动1000再通知委托处理更新;
self.locationManager.distanceFilter =
1000
.0f;
// 如果设为kCLDistanceFilterNone,则每秒更新一次;
}
- (
void
)didReceiveMemoryWarning
{
[
super
didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Actions
- (IBAction)buttonClicked:(id)sender
{
// 判断的手机的定位功能是否开启
// 开启定位:设置 > 隐私 > 位置 > 定位服务
if
([CLLocationManager locationServicesEnabled]) {
// 启动位置更新
// 开启位置更新需要与服务器进行轮询所以会比较耗电,在不需要时用stopUpdatingLocation方法关闭;
[self.locationManager startUpdatingLocation];
}
else
{
NSLog(@
"请开启定位功能!"
);
}
}
#pragma mark - CLLocationManagerDelegate
// 地理位置发生改变时触发
- (
void
)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
// 获取经纬度
NSLog(@
"纬度:%f"
,newLocation.coordinate.latitude);
NSLog(@
"经度:%f"
,newLocation.coordinate.longitude);
// 停止位置更新
[manager stopUpdatingLocation];
}
// 定位失误时触发
- (
void
)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
NSLog(@
"error:%@"
,error);
}
@end
四、总结
CLLocationManager开启用户位置更新后比较耗电,不需要时要及时关闭。