我创建了一个使用mapview的应用程序。对于地图,我使用了MKMapKit
库。当用户选择"允许"警报窗口上的按钮。但我想检测用户何时选择"不允许"。我找到了一个大多数开发人员使用的代理
(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
但代表不会被调用。
也许我错过了什么。在我的标题(.h)文件中,我实现了MKMapViewDelegate
。还有什么我需要做的吗?
我是否需要添加一些额外的类,如CLLocationManager
或其他。
谢谢,
答案 0 :(得分:16)
为了监控位置服务授权状态的变化,您需要实现CLLocationManagerDelegate
方法locationManager:didChangeAuthorizationStatus:
获取类似
-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
if (status == kCLAuthorizationStatusDenied) {
// permission denied
}
else if (status == kCLAuthorizationStatusAuthorized) {
// permission granted
}
}
有关可能的授权状态及其说明的完整列表,您可以查看CLAuthorizationStatus的官方文档。
修改强>
您可能已经拥有CLLocationManager
的实例,我们称之为locationManager
。然后,为了实现您的委托,您将您的类符合CLLocationManagerDelegate
协议(您可以在类的标题中声明它 - 这不是强制性的,但它将为您提供一些静态检查工具)并将其分配给delegate
的{{1}}属性如下:
locationManager
如果按照说明执行了所有操作,则每次授权更改都会调用控制器,如文档中所述:
只要应用程序使用位置服务的能力发生变化,就会调用此方法。
答案 1 :(得分:2)
你可以试试这个:
if(![CLLocationManager locationServicesEnabled])
{
// alert location services denied
}
答案 2 :(得分:0)
// in appdelegate put thecode
-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
if (status == kCLAuthorizationStatusDenied)
{
//location denied, handle accordingly
NSLog(@"Dont allow");
}
else if (status == kCLAuthorizationStatusAuthorized)
{
NSLog(@"Allow");
//hooray! begin startTracking
}
}
//无论你检查
- (IBAction)showMapBtnPressed:(id)sender {
if([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied)
{
NSLog(@"Dont allow");
}else
{
NSLog(@" allow");
}
}