当您第一次使用 MKMapView 启动应用程序时,应用程序会显示警报消息“想使用您当前的位置”,选项“不允许”和“确定”。
我需要自定义此消息。我还需要知道用户选择了哪个选项。我怎样才能做到这一点?
更新:我需要在 iOS 5+ 上实现这个
当您第一次使用 MKMapView 启动应用程序时,应用程序会显示警报消息“想使用您当前的位置”,选项“不允许”和“确定”。
我需要自定义此消息。我还需要知道用户选择了哪个选项。我怎样才能做到这一点?
更新:我需要在 iOS 5+ 上实现这个
在CLLocationManager上设置用途属性
来自这个问题:Replacement for " purpose" property of CLLocationManager
安娜卡列尼娜的回答
在 iOS 6 中替代 purpose 属性是一个名为 NSLocationUsageDescription 的新 Info.plist 键(又名“隐私 - 位置使用说明”)。
该密钥记录在信息属性列表密钥参考中,但不幸的是,目的属性的弃用说明中没有提到它。
但是, CLLocationManager.h 确实有这样的评论:
- 已弃用。使用键 NSLocationUsageDescription 在 Info.plist 中设置目的字符串。
在您的代码中,您可以同时设置 key 和 purpose 属性(但您可能想检查位置管理器是否首先响应该选择器,如果/当该方法在未来被实际删除时)。
如果在 iOS 6 下运行,位置管理器将使用密钥。在低于 iOS 6 下运行时,将忽略 key 并使用 purpose 属性。
对于消息,您可以像 Alex Terente 所说的那样使用 purpose 属性,但它在 iOS 6 中已被弃用
为了知道用户是否拒绝了权限,位置管理器提供了一个失败委托。mapview 使用它自己的位置管理器,所以:使用MKMapView
函数 didFailToLocateUserWithError
- (void)mapView:(MKMapView *)mapView didFailToLocateUserWithError:(NSError *)error {
switch([error code]) {
case kCLErrorDenied:{
//user denied
}
break;
}
}
注意:如果您直接使用 CLLocationManager 它会是- (void)locationManager: (CLLocationManager *)manager didFailWithError: (NSError *)error;
如果您正在为 iOS 6+ 构建,请NSLocationUsageDescription
在Info.plist
文件中使用。插入此键并将其值设置为您将如何处理位置信息的描述。