iOS - 定位服务

9 篇文章 0 订阅
1 篇文章 0 订阅

定位用到<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

这里写图片描述

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

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值