美文网首页
iOS中使用定位轻松几步搞定-获取用户的位置信息

iOS中使用定位轻松几步搞定-获取用户的位置信息

作者: fredericoyang | 来源:发表于2021-05-25 04:05 被阅读0次

    iOS中使用定位轻松几步搞定-获取用户的位置信息 Request location

    基本使用与一次定位 Basic use and location once

    总所周知,iOS的权限控制非常地优秀,在提高安全性的同时,也提高了用户的使用门槛,如何能让用户优雅地正常使用位置信息,正是我们开发者需要做的。

    1、请求定位权限
    限制位置信息使用的情况有:定位功能未开启、内容和隐私访问限制中定位服务项不允许修改、用户拒绝了位置信息访问等。应当在定位功能开启时才请求定位权限,若未开启,应当给予适当提醒。

    2、检查定位权限
    在你准备正式请求定位时,还是应该先确保你拥有了位置信息访问的权限。

    3、请求定位
    终于可以请求定位了,别忘了实现代理方法来处理位置信息,如果定位失败也别忘了给予适当提醒,或者提出建议的操作等。

    在基于 BaseViewController的控制器中添加以下代码:

    - (void)viewDidLoad {
        [super viewDidLoad];
        
        // 1、请求定位权限
        [self requestLocationAuthorization:YES];
    }
    
    // 2、检查定位权限
    [self requestLocationSuccessHandler:^(CLLocationManager *locationManager) {
            locationManager.delegate = self;
            // 3、请求定位
            [locationManager requestLocation];
    } failureHandler:^(CLLocationManager *locationManager, CLAuthorizationStatus authorizationStatus) {
        NSString *message;
        switch (authorizationStatus) {
            case kCLAuthorizationStatusRestricted:
                message = @"定位失败:访问限制已开启";
                break;
    
            case kCLAuthorizationStatusDenied:
                message = @"定位失败:定位权限已禁止";
                break;
    
            default:
                message = @"定位失败:其它错误";
                break;
        }
        [SVProgressHUD showErrorWithStatus:message];
    }];
    
    #pragma mark - CLLocationManagerDelegate
    - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
        LOG_FORMAT(@"location: %g, %g", locations.firstObject.coordinate.latitude, locations.firstObject.coordinate.longitude);
    }
    
    - (void)locationManager:(CLLocationManager *)manager
           didFailWithError:(NSError *)error {
       [SVProgressHUD showErrorWithStatus:error.localizedDescription];
    }
    

    在iOS14中请求精确定位 Full accuracy location

    在获取定位权限成功后,通过请求精确定位方法来确保功能的有效性,如果用户之前关闭了精确定位开关,会弹框让用户临时允许一次精确定位,就像让用户允许一次定位一样。temporaryFullAccuracyPurposeKey1 在 AppConfig中定义。

    [self requestLocationSuccessHandler:^(CLLocationManager *locationManager) {
        if (@available(iOS 14, *)) {
            [self requestLocationTemporaryFullAccuracyAuthorizationWithPurposeKey:temporaryFullAccuracyPurposeKey1 authorizedHandler:^{
                [self->_locationManager requestLocation];
                // do some thing here
            } deniedHandler:^{
                [SVProgressHUD showErrorWithStatus:@"要使用此功能必须开启精确定位"];
            }];
        } else {
            [self->_locationManager requestLocation];
        }
    } failureHandler:nil];
    

    多次定位 Multi times location

    [self requestLocationSuccessHandler:^(CLLocationManager *locationManager) {
        locationManager.delegate = self;
        [locationManager startUpdatingLocation];
    } failureHandler:nil];
    
    #pragma mark - CLLocationManagerDelegate
    - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
        LOG_FORMAT(@"location: %g, %g", locations.firstObject.coordinate.latitude, locations.firstObject.coordinate.longitude);
        [manager stopUpdatingLocation];
    }
    

    相关

    • 详见极致框架官网<extreme.framework/EFBaseViewController.h>中使用位置部分的介绍。通过极致框架官网顶部的搜索功能搜索 EFBaseViewController。

    许可

    • 本文采用 BY-NC-SA 许可协议。即:署名——转载请注明出处;非商业使用;相同方式传播——再分发的文章许可与原文相同。

    查看原文

    相关文章

      网友评论

          本文标题:iOS中使用定位轻松几步搞定-获取用户的位置信息

          本文链接:https://www.haomeiwen.com/subject/fscfsltx.html