在设备上进行测试(Iphone 4,IOS 4.2.1),当您使用MapKit / CLLocationManager时,会有一个标准对话框,要求用户启用位置设置,并建议按钮进入该设置。< / p>
如果单击“确定”,则此对话框似乎永远不会再出现?
如何让它再次以程序方式显示,以帮助用户通过该对话框进入正确的设置视图?
答案 0 :(得分:7)
嗯,不可能以编程方式启动标准对话框,要求用户使用位置服务来允许您的应用。这一切都是由iOS完成的。
但是,您始终可以通过startUpdatingLocation
实例上的CLLocationManager
方法尝试启动位置更新。如果位置服务被禁用,您将通过委托获得有关错误情况的通知,然后您可以打开对话框,要求用户进入“设置”并为您的应用启用位置服务...请参阅以下代码进行过滤kCLErrorDenied
#pragma mark - CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)inManager didFailWithError:(NSError *)inError{
if (inError.code == kCLErrorDenied) {
NSLog(@"Location manager denied access - kCLErrorDenied");
// your code to show UIAlertView telling user to re-enable location services
// for your app so they can benefit from extra functionality offered by app
}
}
请注意,您无法通过应用程序中的URL-scheme启动“设置”应用。
更新:从iOS5.1开始,您可以不使用以下方法。
更新:从iOS5开始,您可以从应用中启动设置:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]];