如何根据位置信息通知iOS后台应用程序

时间:2015-10-27 22:05:26

标签: ios swift

我正在尝试在iOS上实施定位导航应用。我将在我的口袋里放置一个设备,并希望它根据位置信息通知何时符合条件,例如当您在街道上转弯时Google地图导航会通知。

我假设我可以使用CoreLocation和本地通知。

以下是我所做的,期待的和实际的。

  • OS X El Capitan 10.11.1上的XCode版本7.1(7B91b)
  • 在Xcode中,文件 - >新 - >项目 - > iOS应用程序 - >单一视图应用程序
  • 将CoreLocation框架添加到项目
  • 启用“位置更新”后台模式
  • 将值为“hello”的NSLocationAlwaysUsageDescription键添加到info.plist
  • 保持ViewController.swift不变
  • 按如下方式编辑AppDelegate.swift;

    library(vars)
    Canada <- Canada * 1000
    var <- VAR(Canada, p = 2, type = "both")
    plot(irf(var, impulse = "rw", response = "U", boot = T, cumulative = FALSE,     n.ahead = 20))
    plot(irf(var, impulse = "rw", response = "U", boot = T, cumulative = TRUE,     n.ahead = 20))
    

该应用程序正如我所期望的那样在模拟器上工作,即

  • 在iPhone 5模拟器中运行应用程序并允许位置和通知服务
  • 按主页按钮(Shift-Command-H)。
  • 在模拟器菜单中,Debug - &gt;位置 - &gt;免费开车
  • 该应用每10秒显示一次本地通知提醒

该应用在我的设备上有所不同,iPhone 5与iOS 9.1;

  • 通过Xcode运行应用程序并允许位置和通知服务
  • 按下主页按钮
  • 设备不会在主屏幕或通知中心显示通知提醒。
  • 然后,我点击设备上的应用程序图标以显示应用程序前景,打开通知中心并找到两个通知。如果我等待50秒,我预计会新出现5个通知,但不会再显示任何通知。

我知道Simulator的行为与实际设备不同。例如,模拟器在后台显示控制台上的NSLog()和print()输出,而实际设备则没有。

我想我没有为设备配置一些东西,或者我试图以不可行的方式做,但我找不到它是什么。你能告诉我出了什么问题以及如何解决它吗?

1 个答案:

答案 0 :(得分:2)

将CLLocationManager的allowBackgroundLocationUpdates设置为true解决了我的问题。

manager.allowBackgroundLocationupdates = true

如果为false(默认值),则暂停时更新会停止。更新在前景或背景时发生。