在用户拒绝使用定位服务后,如何提示用户打开定位服务

2024-04-02

我有一个具有显式用户交互的应用程序,它利用用户的当前位置。如果用户拒绝访问位置服务,我仍然希望后续使用能够提示用户转到设置并重新启用我的应用程序的位置服务。

我想要的行为是内置地图应用程序的行为:

  1. 在“设置”>“常规”>“重置”>“重置位置警告”中重置位置警告。
  2. 启动地图应用程序。
  3. 点击左下角的当前位置按钮。
  4. 地图提示“地图”想要使用您当前的位置| “不允许” | “允许”。
  5. 选择“不允许”选项。
  6. 再次点击左下角的当前位置按钮。
  7. 地图提示“打开定位服务以允许“地图”确定您的位置”| “设置”| “取消”。

在我自己的应用程序中,相同的基本流程会导致我的 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(使用前将#替换为@)

在用户拒绝使用定位服务后,如何提示用户打开定位服务 的相关文章

随机推荐

  • Docker 不断安装错误版本的 Python

    我在从 NVIDIA 的 CUDA 11 8 基础映像中提取后安装 Python 然而 尽管安装了 Python 3 10 Docker 却告诉我它正在使用 Python 3 8 我的 Docker 文件如下 FROM nvidia cud
  • C 和 C++ 上下文中的激活记录是什么?

    它意味着什么以及了解它对于 C C 程序员有多重要 至少在概念上 跨平台是否相同 我将其理解为一个分配的内存块 用于通过函数存储局部变量 我想了解更多 激活记录是堆栈帧的另一个名称 它是组成调用堆栈的数据结构 它一般由以下几部分组成 被叫方
  • 是否可以在没有服务器的情况下实现 XMPP 点对点连接?

    我正在使用 libjingle 进行 XMPP 连接 我可以连接两个 XMPP 客户端而不需要中间有服务器吗 如果是的话我该怎么做如果不是那么为什么不可能呢 XMPP 客户端1 XMPP 客户端2 您可能无法直接使用 libjingle 执
  • Java简单代码:java.net.SocketException:来自服务器的意外文件结尾

    我用 Java 编写了一些简单的代码 该方法应该连接到网站并返回 BufferedReader private BufferedReader getConnection String url a URL url try System out
  • 将成员函数传递给 std::thread [重复]

    这个问题在这里已经有答案了 可能的重复 使用成员函数启动线程 https stackoverflow com questions 10673585 start thread with member function 我最近一直在使用 c 1
  • highcharts 可以导出图表和表格数据吗?

    我试图弄清楚 highcharts 是否可以执行以下操作 渲染一个标准水平条形图 其中包含其下方的单独表格数据 想象一个条形图下方有一个类似 html 的表格 用户可以使用 highcharts 提供的 exporting js 文件导出整
  • 我可以根据窗口大小执行javascript吗?

    我有一个响应式网站 我正在其中使用 JavaScript 创建粘性侧边栏 当浏览器大小小于 768px 时 我还使用媒体查询从多列布局更改为单列布局 我需要弄清楚如何禁用单列布局中的粘性菜单脚本 本质上 我需要类似脚本语句的媒体查询之类的东
  • 是否存在使用 [NSFileManager defaultManager] 而不是 [[NSFileManager alloc] init] 更好的情况?

    在 iOS 中 我知道有时 NSFileManager alloc init 更好 特别是当 NSFileManager defaultManager 可能不是线程安全的时候 参考 http useyourloaf com blog 201
  • Msmq 和 WCF 服务

    我使用 NetMsmq 绑定创建了一个 WCF 服务 在我的计算机上创建了一个专用队列并执行了该项目 这样工作正常 我的 WCF 服务已启动并在调试环境中使用队列访问消息 现在 我想使用 Windows 服务托管该服务 为此我还创建了一个新
  • 如果订阅有效时间少于 3 个月,则暂时删除取消按钮

    我需要一些帮助来暂时删除 我的帐户 内 我的订阅 页面中的取消按钮 我想隐藏取消按钮 直到至少 3 个月后自用户订阅以来 或 90 天 订阅3个月后 取消按钮将再次出现 使用 Woocommerce 与 Woo 订阅和 Woo 会员资格一起
  • 从用逗号分隔的两个表中进行 SELECT 如何工作? (从 T1、T2 选择 *)

    给定 2 个表 T1 和 T2 T1 T2 A 1 B 2 C 3 您提出一个查询 SELECT FROM T1 T2 从该查询中获取的行的编号是多少 a 4 b 5 c 6 d 9 答案是 9 问题 为什么答案是 9 两个表之间的逗号表示
  • MySQL 准备语句 - 如何循环

    我有一个充满 ID 号的表 我需要循环遍历该表 并将其用作准备好的语句中的变量 我不知道是否需要为此使用存储过程 或者常规查询是否可以做到这一点 这是一个简单的例子 SELECT id from var list loop through
  • 创建列表的子类

    我有以下代码 obj lt list list a 4 f 5 g 5 list a 44 f 54 g 54 class obj lt mysubclass class obj 1 class obj 2 class obj 1 2 cl
  • 在jsp中处理浏览器的“后退”按钮

    我有一个jsp搜索页面 Search jsp 和一个结果页面 Result jsp 它们都可以选择搜索条件 然后将参数传递给java控制器文件 Controller java 以构建查询字符串并执行查询搜索 查询字符串和搜索结果将传递到 R
  • 将文件名与文件夹名匹配,然后移动文件

    我有名为 a1 txt a2 txt a3 txt a4 txt a5 txt 等的文件 然后我有名为 a1 1998 a2 1999 a3 2000 a4 2001 a5 2002 等的文件夹 例如 我想在文件 a1 txt 和文件夹 a
  • 当应用程序进入后台时,约束会重置 - iOS 13

    我通常设置了视图的前导 尾随约束 我已将其高度设置为静态 325 对于底部约束 我设置了 2 个约束 1 主视图的底部约束为视图的底部约束 2 主视图的底部约束到视图的顶部约束 现在 根据用户的操作 我仅显示带有动画的隐藏视图 因此 当视图
  • VBA 中的“Dim fso、MyFile、FileName、TextLine”是什么?

    我从这里的一位好人那里收到了这段代码 他们愿意花时间和精力与菜鸟分享他们的知识 Sub ReadLinesFromAFileOneAfterAnother Const ForReading 1 ForWriting 2 ForAppendi
  • iOS 7.0及以上版本的iOS设备的唯一标识

    寻求您的帮助 我在获取时遇到问题设备标识符 实际上我正在使用 UIDevice IdentifierAddition h NSString MD5Addition h 类来获取 Identifier 但其为我的所有设备返回相同的标识符 i
  • symfony 2根据数据库中存储的用户首选项设置区域设置

    我试图根据存储在数据库中的当前用户的首选项来设置区域设置 因此 我们的 User 类有一个 getPreferredLanguage 它返回一个区域设置标识 en fr FR 等 我考虑过以下方法 注册订阅 KernelEvents REQ
  • 在用户拒绝使用定位服务后,如何提示用户打开定位服务

    我有一个具有显式用户交互的应用程序 它利用用户的当前位置 如果用户拒绝访问位置服务 我仍然希望后续使用能够提示用户转到设置并重新启用我的应用程序的位置服务 我想要的行为是内置地图应用程序的行为 在 设置 gt 常规 gt 重置 gt 重置位