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

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

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

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

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

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

【问题讨论】:

    标签: iphone ios location cllocationmanager


    【解决方案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;
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-03-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多