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

时间:2011-05-13 22:41:53

标签: iphone ios cllocationmanager

我想拥有与地图应用相同的功能,每当用户按下“当前位置”按钮启用位置服务时,系统会提示用户:

  • 关闭位置服务
  • 用户按'getCurrentLocation'按钮
  • App尝试使用CLLocationManager获取位置
  • 用户获取“打开位置服务...”消息,显示“设置”和“取消”按钮。
  • 用户点击“取消”
  • 用户再次按下''getCurrentLocation'按钮
  • App尝试再次使用CLLocationManager获取位置
  • 用户无法再获取“打开位置服务...”消息

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

如果我制作自己的警报,则无法获得相同的“设置”按钮功能。此外,我不希望用户看到多个看起来相同的警报。

有什么想法吗?

3 个答案:

答案 0 :(得分:22)

iOS 8中的新功能有一个名为UIApplicationOpenSettingsURLString的常量。

来自UIKit下的"What's new in iOS"文件是:

  

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

来自Apple的documentation

  

<强> UIApplicationOpenSettingsURLString

     

用于创建可以传递给openURL:方法的URL。当您打开从此字符串构建的URL时,系统会启动“设置”应用并显示应用的自定义设置(如果有)。

您可以将其传递给UIApplication openURL:方法。它可能看起来像:

NSURL *settings = [NSURL URLWithString:UIApplicationOpenSettingsURLString];

if ([[UIApplication sharedApplication] canOpenURL:settings])
    [[UIApplication sharedApplication] openURL:settings];

答案 1 :(得分:19)

如果您想要将用户指回设置应用中的位置服务屏幕,您可以将其发送到特殊网址,如下所示:

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

答案 2 :(得分:10)

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

但是如果您愿意,只需启动位置服务,系统将提示用户再次启动它。如果用户选择加入请求,将开始像往常一样在您的代表上报告位置。如果用户拒绝您的请求,您将收到locationManager:didFailWithError:委托方法的失败回调。该错误的错误代码为kCLErrorDenied

我强烈反对您不这样做,但如果用户拒绝,您可以尝试再次启动该服务,并再次询问用户。大多数用户会讨厌你。