用户选择允许后如何处理启用位置服务?
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