Core Location是开发定位服务应用程序的框架。我们要在Xcode中添加“CoreLocation.framework”存在的框架。主要使用的类是:CLLocationManager,通过CLLocationManager实现定位服务。
注意:
1、添加“CoreLocation.framework”存在的框架
2、导入头文件 #import <CoreLocation/CoreLocation.h>
// 检测定位开关有没有打开
if (![CLLocationManager locationServicesEnabled])
{
[[[UIAlertView alloc] initWithTitle:@"提示:"
message:@"定位服务已被关闭,请前往设置页面打开!"
delegate:nil
cancelButtonTitle:nil
otherButtonTitles:@"确定", nil] show];
}
2、设置协议 CLLocationManagerDelegate
3、创建实例
CLLocationManager *locationManager;
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.distanceFilter = kCLDistanceFilterNone;
[locationManager startUpdatingLocation];
4、使用回调
// 代理回调 检测是何种原因导致定位失败
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
NSString *errorString;
[manager stopUpdatingLocation];
NSLog(@"Error: %@",[error localizedDescription]);
switch ([error code])
{
case kCLErrorDenied:
{
errorString = @"Access to Location Services denied by user";
[[[UIAlertView alloc] initWithTitle:@"提示:"
message:@"请打开该app的位置服务!"
delegate:nil
cancelButtonTitle:nil
otherButtonTitles:@"确定", nil] show];
}
break;
case kCLErrorLocationUnknown:
{
errorString = @"Location data unavailable";
[[[UIAlertView alloc] initWithTitle:@"提示:"
message:@"位置服务不可用!"
delegate:nil
cancelButtonTitle:nil
otherButtonTitles:@"确定", nil] show];
}
break;
default:
{
errorString = @"An unknown error has occurred";
[[[UIAlertView alloc] initWithTitle:@"提示:"
message:@"定位发生错误!"
delegate:nil
cancelButtonTitle:nil
otherButtonTitles:@"确定", nil] show];
}
break;
}
}
// 实现位置的更新
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
NSString *latitudeStr = [NSString stringWithFormat:@"%3.5f",newLocation.coordinate.latitude];
NSString *longitudeStr = [NSString stringWithFormat:@"%3.5f",newLocation.coordinate.longitude];
[locationManager stopUpdatingLocation];
NSLog(@"location ok");
}