【问题标题】:Notifications for changes to Location Services?位置服务变更通知?
【发布时间】:2011-02-08 09:48:59
【问题描述】:

我一直在为我正在构建的应用程序尝试使用 CLLocationManager。我了解如何检查位置服务是否已启用以及用户是否允许我的应用使用他们当前的位置。

如果用户最初允许我的应用使用他们的位置,然后用户:

  1. 明确关闭定位服务
  2. 将手机置于飞行模式
  3. 明确取消我的应用使用其位置的授权

是否有任何通知发布,我可以订阅并在重新打开我的应用时自动回复?

如果没有,处理这种情况的最佳方法是(以便我可以更新显示 GPS 坐标的视图)手动将此检查放入我的 AppDelegate 的 applicationDidFinishLaunching 和 applicationWillEnterForeground 方法中吗?

我认为它应该去那里的原因是因为当您重新启动应用程序时,第一个视图不会触发 viewWillAppear,如果该视图需要从显示 GPS 坐标更改为要求他们重新启用的友好消息位置服务,AppDelegate 是我能想到的最好的钩子。

谢谢!

【问题讨论】:

    标签: iphone objective-c ios


    【解决方案1】:

    在 iOS 4.2 及更高版本上,您将收到委托调用

    - (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status;
    

    【讨论】:

      【解决方案2】:

      你的方法是正确的。如果您在重新打开应用程序时发现核心位置不可用或网络访问已更改,则可以向需要相应更新的视图控制器发送通知。查看 NSNotificationCenter

      即使您采用上述方法,我还是建议您每次都在 viewDidAppear 中进行这些检查,因为网络访问可能随时丢失。加上在线测试,您可以在其中进行任何位置检查。

      【讨论】:

      • 感谢您的回复。我想我将使用 1) viewWillAppear 来涵盖初始应用程序启动以及任何时候视图在屏幕上加载,即使在初始加载之后,以及 2) applicationWillEnterForeground 来涵盖从后台重新打开应用程序。在我的测试中,viewDidAppear 仅在第一次加载视图时被调用,所以我不想使用它,以防网络可达性在它们仍在应用程序中时发生变化。
      猜你喜欢
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多