我有一个具有显式用户交互的应用程序,它利用用户的当前位置。如果用户拒绝访问位置服务,我仍然希望后续使用能够提示用户转到设置并重新启用我的应用程序的位置服务。
我想要的行为是内置地图应用程序的行为:
- 在“设置”>“常规”>“重置”>“重置位置警告”中重置位置警告。
- 启动地图应用程序。
- 点击左下角的当前位置按钮。
- 地图提示“地图”想要使用您当前的位置| “不允许” | “允许”。
- 选择“不允许”选项。
- 再次点击左下角的当前位置按钮。
- 地图提示“打开定位服务以允许“地图”确定您的位置”| “设置”| “取消”。
在我自己的应用程序中,相同的基本流程会导致我的 CLLocationManagerDelegate -locationManager:didFailWithError: 方法在最后一步被调用,并出现 kCLErrorDenied 错误,并且用户没有选择打开“设置”应用程序来更正该错误。
我可以显示自己的警报来响应错误,但它无法启动“设置”应用程序,就像操作系统可以提供的内置地图应用程序使用的警报一样。
我缺少的 CLLocationManager 类中是否有某些东西可以给我这种行为?
使用 iOS8,您终于可以通过 openURL 将用户链接到“设置”应用程序。例如,您可以创建一个带有单个按钮的 UIAlertView,将用户带到“设置”应用程序:
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:ICLocalizedString(@"LocationServicesPermissionTitle")
message:ICLocalizedString(@"LocationPermissionGeoFenceMessage")
delegate:self
cancelButtonTitle:@"Settings"
otherButtonTitles:nil];
[alert show];
在你的 UIAlertView 委托中:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
[alertView dismissWithClickedButtonIndex:buttonIndex animated:YES];
[[UIApplication sharedApplication] openURL: [NSURL URLWithString: UIApplicationOpenSettingsURLString]];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)