【问题标题】:Being notified when user turns on location services iOS 7 and up在用户打开位置服务 iOS 7 及更高版本时收到通知
【发布时间】:2015-06-22 20:04:41
【问题描述】:

我面临这样一种情况,我们希望根据用户是否启用了位置服务来启动特定流程。这部分是微不足道的。但是,如果用户关闭或打开位置服务,我们希望通过更改我们的流程来扩展此功能。我们目前能够监控、更改或处理用户何时关闭位置服务。我的问题是,当用户重新打开位置服务时,如何通知我们的应用程序?

这是我们目前正在使用的内容

  • iOS 7
  • 后台定位模式已启用
  • 我们始终使用请求来获取位置服务

这是我们尝试过的

  1. 我们尝试在用户关闭定位服务后设置一个计时器,定期检查用户是否重新开启定位服务。由于许多原因,这不太理想。除此之外,一旦关闭位置服务,计时器就会被终止,因为不再需要后台服务并且操作系统会终止我们的进程。这是可以理解的。
  2. 我们还采用了通知用户他们刚刚停止进程并且需要重新打开定位服务的方法。这种方法有两个问题。
    1. 如果用户没有启用通知,那么这种方法根本没有用。
    2. 如果他们确实启用了通知,那么我们首先需要用户重新打开位置服务,然后他们需要打开应用备份以让我们的应用“唤醒”备份。

提前谢谢你!

【问题讨论】:

  • 我听说有些应用程序在后台保持活动使用其他后台模式(例如播放和录制背景音频)。如果应用程序可以工作,您可以使用计时器来检查位置服务状态。但是,如果位置管理器在后台创建,它将仅存在 180 秒(在这种情况下,您需要使用位置管理器区域(创建并重新创建它们))。但是你必须向苹果解释为什么你的应用使用其他后台模式
  • @gaRik Clever,我们将尝试的一件事是使用后台获取模式,而不是执行获取,我们将只检查启用的位置。不过,这可能是 Apple 的问题......
  • 后台抓取偶尔会工作,每天几次,随机时间

标签: ios ios7 ios8 core-location cllocationmanager


【解决方案1】:

应用进入前台后,只需检查您的位置服务即可。

  NotificationCenter.default.addObserver(self, selector: #selector(applicationDidEnterForeground), name: UIApplication.didEnterForegroundNotification, object: nil)

  func applicationDidEnterForeground() {
    print("Location services enabled? \(CLLocationManager.locationServicesEnabled())")
  }

【讨论】:

    【解决方案2】:

    经过数小时的研究和尝试实施解决方案,我们发现这在 iOS 8 中是不可能的。以下是我们发现的参考:

    1. 我们能够在用户关闭定位服务时收到通知,如果他们关闭了我们应用的定位服务。如果用户关闭主要位置服务,我们没有收到通知。
    2. 我们没有在位置服务重新打开时收到消息,无论是我们的位置服务还是主要的位置服务。
    3. 您不能使用计时器方法,因为如果将应用程序发送到后台,计时器将被终止。所以我们不能定期检查。 这对于我们的用例来说是不可接受的,但值得娱乐
    4. 您仍然可以调用 CLLocationManager,就像您有权使用位置服务一样,即使您没有权限。
    5. 如果您确实调用了 CLLocationManager,则在您的应用获得权限后,您将开始接收位置消息,而无需重新注册以接收位置消息。


    我们的解决方案:

    4 和 5 的组合是我们的可取之处。我们遇到了一个边缘情况,用户可能有资格获得位置事件触发,但之前拒绝使用位置服务,然后在获得资格后,用户授予我们使用位置服务的权限。在做了一些重构之后,我们移动了位置管理器,以便我们注册位置事件更新,特别是地理围栏,即使我们没有权限。经过测试,我们发现在边缘情况下,即使无需重新初始化位置管理器,我们也开始接收位置更新。这同样适用于任何感兴趣的人的信标区域监控。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-24
      • 2020-08-30
      相关资源
      最近更新 更多