【问题标题】:Lazily asking for Location Services懒惰地询问定位服务
【发布时间】:2012-04-13 06:15:04
【问题描述】:

当我第一次安装并启动我的应用程序时,它会立即要求提供位置服务,即使尚未调用 startUpdatingLocation。那时我什至还没有分配 CLLocationManager 实例。我希望在我实际拨打电话后懒惰地完成这个提示,这样用户就不会盲目地关闭它。这个流程最近是否随着 iOS 的变化而改变?我记得它曾经被懒惰地问过。我使用的是 5.1 固件。

【问题讨论】:

  • 您是在说用户第一次启动您的应用时出现的那个对话框(应用 *** 想要使用...)?
  • 是的,它在 5.1 中出于某种原因这样做。

标签: iphone ios location


【解决方案1】:

这很有趣。我测试了您的假设,甚至没有分配位置管理器,但出现了 iOS 位置权限对话框。我尝试了以下故障排除。在每一步之后,我都在设备上运行了项目,我只能让位置弹出窗口出现在最后一步。

  • 启动新应用
  • 需要 info.plist 中的位置服务
  • 在 info.plist 中需要 gps
  • 将 CoreLocation 链接到项目
  • 将核心位置导入标题
  • 为位置管理器创建和综合属性
  • 向 CLLocationManager 询问 +authorizationStatus
  • 向 CLLocationManager 询问 +locationServicesEnabled
  • alloc 初始化一个 CLLocationManager 实例
  • 告诉 CLLocationManager 开始更新位置。

只有最后一步才会出现提示。 为了确保我什至创建了一个视图控制器,它推送了第二个视图控制器,该控制器初始化了一个 CLLocationManager 并开始更新位置。只有在推送第二个视图控制器时才会出现权限弹出窗口。这就是在 5.1 上运行的最新 Xcode。

我已经证明,位置服务仍然只在您尝试打开位置的确切时刻请求许可,就像在以前的 SDK 中所做的那样。也许检查您的代码,也许在此处粘贴一些代码,以便我们更详细地了解。 :)

【讨论】:

  • 我也会试试这个以确保。我所有的位置处理都是通过一个单例完成的,所以我在整个应用程序中只有一次调用 startUpdatingLocation。我有一个断点,它永远不会被调用。我能想到的唯一另一种可能性是,无论出于何种原因,依赖框架之一正在触发此操作。我的项目很大,所以重新创建项目文件将是一个痛苦。此外,我从 iOS 3.0 开始就一直在使用和升级项目文件。
  • 您是否使用广告网络或遥测框架?前往断点侧边栏,单击底部的加号并在符号框中键入-[CLLocationManager startUpdatingLocation],它应该会在整个项目和库中为 startUpdatingLocation 中断。可能也值得收听–startMonitoringSignificantLocationChanges
  • 谢谢你,这是一个很好的技巧!这是因为我在启动时在后台分配(不显示)一个 MKMapView 以供以后显示。
  • 我认为如果 UIBackgroundModes (info.plist) 包含“位置”,弹出窗口也会出现在应用启动时。
猜你喜欢
  • 2015-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
  • 2010-09-26
  • 1970-01-01
相关资源
最近更新 更多