您的位置:首页 > 移动开发 > IOS开发

iOS - 定位服务

2015-10-22 11:37 513 查看
定位用到
<CoreLocation/CoreLocation.h>
CLLocationManagerDelegate


本篇只是做简单的定位测试

#import "AppDelegate.h"
#import <CoreLocation/CoreLocation.h>

@interface AppDelegate ()<CLLocationManagerDelegate>
{
CLLocationManager *_locationManager;//用于定位获取用户信息
CLLocation *_location;//用于保存位置信息
}
/** 纬度 */
@property (nonatomic, assign) double latitude;
/** 经度 */
@property (nonatomic, assign) double longitude;

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[self setUpLocationInfomation];
return YES;
}
- (void)setUpLocationInfomation
{
_locationManager = [[CLLocationManager alloc]init];
if ([CLLocationManager locationServicesEnabled]) {
NSLog(@"--------------开始定位---------------");
// distanceFilter是距离过滤器,为了减少对定位装置的轮询次数,位置的改变不会每次都去通知委托,而是在移动了足够的距离时才通知委托程序
// 它的单位是米,这里设置为至少移动200再通知委托处理更新;
_locationManager.delegate = self;
_locationManager.distanceFilter = 200.0;
// kCLLocationAccuracyBest:设备使用电池供电时候最高的精度
_locationManager.desiredAccuracy = kCLLocationAccuracyBest;

//ios8+以上要授权,并且在plist文件中添加NSLocationWhenInUseUsageDescription,NSLocationAlwaysUsageDescription,值可以为空
if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {
//ios8+,不加这个则不会弹框
[_locationManager requestWhenInUseAuthorization];//使用中授权
[_locationManager requestAlwaysAuthorization];
}
[_locationManager startUpdatingLocation];
}else{
NSLog(@"--------------定位失败---------------");
}
}

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations
{
//此处locations存储了持续更新的位置坐标值,取最后一个值为最新位置,如果不想让其持续更新位置,则在此方法中获取到一个值之后让locationManager stopUpdatingLocation

if (_latitude) {

// 这里我测试了获取经度后stop,发现并不能有效停止,也许是因为速度较慢再次update了,若理解有误望指正
[_locationManager stopUpdatingLocation];

}else{
NSLog(@"didUpdateLocations ++++++++++ ");

CLLocation * cl = [locations lastObject];
_latitude = cl.coordinate.latitude;
_longitude = cl.coordinate.longitude;

NSLog(@"纬度 ----- %f",_latitude);
NSLog(@"经度 ----- %f",_longitude);
}
}
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
NSLog(@"定位失败");
}


在plist文件中添加弹窗询问是否定位的属性:

NSLocationWhenInUseUsageDescription
NSLocationAlwaysUsageDescription




该属性下可以填写弹窗信息,下图为效果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: