如何提示用户再次打开位置服务…

我想要具有与Map应用程序相同的function,在每次按“当前位置”button时都会提示用户,以便在closures位置服务时启用它们:

  • closures位置服务
  • 用户按下“getCurrentLocation”button
  • 应用程序尝试使用CLLocationManager获取位置
  • 用户获取“打开位置服务…”消息,显示“设置”和“取消”button。
  • 用户点击“取消”
  • 用户再次按下“getCurrentLocation”button
  • 应用程序尝试再次使用CLLocationManager获取位置
  • 用户不会再收到“打开位置服务…”消息

在地图应用程序中,用户每次都会收到“打开位置服务…”消息。 我如何让我的应用程序做同样的事情? 我让用户我正在使用一个新的CLLocationManager实例,万一是这个问题,但事实并非如此。 我看不到任何会影响此设置的设置。

如果我自己提醒,我无法获得相同的“设置”buttonfunction。 此外,我不希望用户看到相同的多个警报。

有任何想法吗?

在iOS 8中新增了一个名为UIApplicationOpenSettingsURLString的常量。

从UIKit的“iOS新增function”文档中可以看到:

您可以将用户直接转到“设置”应用中与应用相关的设置。 将UIApplicationOpenSettingsURLString常量传递给UIApplication类的openURL:方法。

从苹果的文档 :

UIApplicationOpenSettingsURLString

用于创build可以传递给openURL:方法的URL。 当您打开使用此string构build的url时,系统将启动“设置”应用程序,并显示该应用程序的自定义设置(如果有)。

你可以把它传递给UIApplication openURL:方法。 它可能看起来像这样:

 NSURL *settings = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; if ([[UIApplication sharedApplication] canOpenURL:settings]) [[UIApplication sharedApplication] openURL:settings]; 

如果您想要将用户指向“设置”应用中的“定位服务”屏幕,可以将其发送到特定的URL,如下所示:

 [[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"prefs:root=LOCATION_SERVICES"]]; 

如果启用了位置服务,则可以查询共享的CLLocationManager实例。 正确的方法是尊重用户select禁用位置服务。

但是,如果你想,只要启动位置服务,用户将被提示重新启动它。 如果用户select请求位置将像往常一样开始在您的代表上报告。 如果用户拒绝你的请求,你会得到一个失败的callback到locationManager:didFailWithError:委托方法。 该错误将有一个错误代码kCLErrorDenied

我强烈build议您不要这样做,但是如果用户拒绝,您可以尝试再次启动服务,并且用户将被再次询问。 但大多数用户会恨你。