用户选择允许后如何处理启用位置服务?

Posted

技术标签:

【中文标题】用户选择允许后如何处理启用位置服务?【英文标题】:How to handle Enable Location Services after a user selects allow? 【发布时间】:2012-06-19 12:24:08 【问题描述】:

基本上,当我的应用首次启动时,会出现启用定位服务提示。当用户点击允许时,我想开始更新用户位置并放大该区域。

在我的 viewDidLoad 中,我启动了位置管理器,但不幸的是,视图在用户有机会点击允许之前就已加载。在应用程序的第二次启动时一切正常,因为用户已经允许位置服务

我的问题是如何捕获点击允许的事件,以便我可以运行代码来放大某个区域?

我尝试过使用-(void)locationManager:didChangeAuthorizationStatus:,但是当用户点击允许时它似乎没有调用这个委托方法。

希望这是有道理的,我对此很陌生。

【问题讨论】:

【参考方案1】:

据我所知,您不能,但您不必捕获此事件,因为在获得该位置的坐标之前,您将无法缩放到某个位置。您的应用在第二次启动时运行良好,因为它从第一次启动时就使用缓存的位置数据。因此,您需要在收到新的有效坐标后运行缩放代码。 如果你使用 CLLocationManager,比看看

– locationManager:didUpdateToLocation:fromLocation: 

在它的委托中。如果用户拒绝使用位置服务,您的代表将收到

locationManager:didFailWithError:

有相应的错误。

如果你使用 MKMapKit,比在 MKMapView 委托实现方法中

– mapViewWillStartLocatingUser: 

专注于当前用户位置。 处理拒绝工具

– mapView:didFailToLocateUserWithError:

相应 Apple 文档的链接:

CLLocationManager

CLLocationManagerDelegate

MKMapViewDelegate

【讨论】:

【参考方案2】:

在这里它工作得很好。我启动位置管理器,然后设置它的委托并启动它。当弹出允许出现时,-(void)locationManager:didChangeAuthorizationStatus: 被调用,CLAuthorizationStatus 等于 kCLAuthorizationStatusNotDetermined。如果我点击“不允许”,则会再次调用它,CLAuthorizationStatus 等于 kCLAuthorizationStatusDenied。当点击“允许”时,它被称为CLAuthorizationStatus 等于kCLAuthorizationStatusAuthorized。检查您的委托是否设置正确。

【讨论】:

【参考方案3】:

你可以这样处理:

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status


    switch([CLLocationManager authorizationStatus])
    
        case kCLAuthorizationStatusAuthorized:
            NSLog(@"Location services authorised by user");
            break;

        case kCLAuthorizationStatusDenied:
            NSLog(@"Location services denied by user");
            break;

        case kCLAuthorizationStatusRestricted:
            NSLog(@"Parental controls restrict location services");
            break;

        case kCLAuthorizationStatusNotDetermined:
            NSLog(@"Unable to determine, possibly not available");
            break;
    

【讨论】:

以上是关于用户选择允许后如何处理启用位置服务?的主要内容,如果未能解决你的问题,请参考以下文章

maxscale在mariadb主从切换后如何处理event的状态-handle_events

如何处理位置服务弹出警报上的“取消”按钮

SVN触发构建后如何处理来自Teamcity服务器本身的api

提交数据库php后如何处理电子邮件发送失败

读写分离中间件 MaxScale 在 slave 有故障后如何处理?

Spring Security登录成功后如何处理用户信息