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

Iphone 如何提示用户打开位置服务…再次,iphone,ios,cllocationmanager,Iphone,Ios,Cllocationmanager,我希望拥有与地图应用程序相同的功能,在地图应用程序中,用户每次按下“当前位置”按钮时都会收到提示,以便在关闭位置服务时打开位置服务: 关闭定位服务 用户按下“getCurrentLocation”按钮 应用程序尝试使用CLLocationManager获取位置 用户收到“打开位置服务…”消息,其中显示“设置”和“取消”按钮 用户点击“取消” 用户再次按下“getCurrentLocation”按钮 应用程序再次尝试使用CLLocationManager获取位置 用户不再收到“打开位置服务…”消

我希望拥有与地图应用程序相同的功能,在地图应用程序中,用户每次按下“当前位置”按钮时都会收到提示,以便在关闭位置服务时打开位置服务:

  • 关闭定位服务
  • 用户按下“getCurrentLocation”按钮
  • 应用程序尝试使用CLLocationManager获取位置
  • 用户收到“打开位置服务…”消息,其中显示“设置”和“取消”按钮
  • 用户点击“取消”
  • 用户再次按下“getCurrentLocation”按钮
  • 应用程序再次尝试使用CLLocationManager获取位置
  • 用户不再收到“打开位置服务…”消息
在地图应用程序中,用户每次都会收到“打开位置服务…”消息。我如何让我的应用程序也这样做?我让用户知道我正在使用一个新的CLLocationManager实例,以防出现问题,但事实并非如此。我看不到任何会影响此操作的设置

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


有什么想法吗?

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

但是如果你想,不管怎样只要启动定位服务,就会提示用户再次启动。如果用户选择加入请求,则会像往常一样在您的代理上报告位置。如果用户拒绝了您的请求,您将得到一个到
locationManager:didFailWithError:
delegate方法的失败回调。该错误的错误代码将为
kclerorDenied


我强烈建议您不要这样做,但是如果用户说不,您可以尝试再次启动服务,并且会再次询问用户。不过,大多数用户都会因此讨厌你。

如果你想让用户回到“设置”应用程序中的“位置服务”屏幕,你可以将他们发送到一个特殊的URL,如:

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

iOS 8中新增了一个常量,名为
UIApplicationOpenSettingsURLString

UIKit下的文档中有以下行:

您可以将用户直接带到“设置”应用程序中与应用程序相关的设置。将
uiapplicationopensetingsurlstring
常量传递给UIApplication类的openURL:method

来自苹果的:

UIApplicationOpenSettingsURLString

用于创建可以传递给openURL:方法的URL。当您打开根据此字符串生成的URL时,系统将启动设置应用程序并显示应用程序的自定义设置(如果有)

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

NSURL *settings = [NSURL URLWithString:UIApplicationOpenSettingsURLString];

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

+1用户只需在某一时刻决定是否允许某个应用程序使用他们的位置,我注意到我最近使用的很多应用程序都会定期请求权限,即使过去不允许,我也不喜欢。如果你的应用程序依赖位置服务来实现任何重要功能,那么最好的方法是检测位置服务何时被禁用,并在应用程序中显示被动用户界面,通知用户并允许他们重新打开位置服务。如果用户选择加入,则可以启动位置服务,该服务将提示用户启用。感谢您的反馈。我支持你,我完全不想让我的用户因为重新要求他们允许我的应用程序访问定位服务而烦恼。但在这种情况下,用户正在点击“获取当前位置”按钮,因此似乎应该告诉他们需要打开此按钮。这与用户点击“获取当前位置”按钮时地图应用程序中的操作相同。我正在按照您的建议进行操作,调用start monitor方法,但它不会重新提示用户,我只是得到了kCLErrorDenied错误。这是不正确的。一旦显示location services授权警报视图,用户将再也看不到它。曾经(尽管手机复位。)即使是应用程序删除和重新安装也不会再次显示。用户恢复位置服务授权的唯一方法是转到“设置”应用程序并直接重新启用它。@Yetanotherjosh此外,可以在“设置”>“常规”>“重置”>“重置位置警告”中手动重置位置警告。显然不再是这样了。()所以我们在地图应用程序中看到的功能无法在我们自己的应用程序中复制,这就是全部的结论吗?似乎没有解决办法?有更新吗?我正在开发iOS 7应用程序……这是一个老问题,但这是2014年的正确答案。