应用程序未运行时聆听信标

时间:2016-05-18 14:36:53

标签: ios objective-c bluetooth ibeacon bluetooth-lowenergy

我正在尝试在我的应用未运行时听取iBeacons(用户退出应用并且它未在后台运行)。

我已指定蓝牙LE背景模式,可以在应用处于活动状态和后台时收听和接收目击。但是,我很难确定如何在我的应用未运行时实现相同的功能。

我一直在阅读Core Bluetooth指南并尝试实施CBCentralManagerDelegate - 如果这是此方案的正确解决方案。我不明白我在哪里实施CBCentralManagerDelegate。我是在AppDelegate还是在处理信标目击的视图控制器中实现它?我是否必须声明CBCentralManager?我该怎么做centralManagerDidUpdateState:

我不关心恢复或保留状态,我只是希望我的应用程序在未运行时接收信标目击。

我已经添加了NSLocationAlwaysUsageDescription,并且要求获得该位置的许可。

如果我能提供更多信息,请告诉我。

1 个答案:

答案 0 :(得分:3)

Apple以不同于其他BLE服务的方式对待iBeacon支持。

它认为iBeacons监控是位置管理器服务。

您想将NSLocationAlwaysUsageDescription密钥添加到您应用的info.plist。

在启动时,您要检查位置管理员的授权状态,如果它不是kCLAuthorizationStatusAuthorizedAlways,那么您想要请求它。该代码如下所示:

CLAuthorizationStatus status =[CLLocationManager authorizationStatus];

if (status != kCLAuthorizationStatusAuthorizedAlways
  && [self.theLocManager respondsToSelector: 
    @selector(requestAlwaysAuthorization)])
  {
    [self.theLocManager requestAlwaysAuthorization];
  }

编辑:

在您的app delegate的application:didFinishLaunchingWithOptions:方法中,您需要检查密钥UIApplicationLaunchOptionsLocationKey的选项。

引用CLLocationManager类参考的相关部分:

  

如果您的iOS应用不是,则会发生区域边界跨越   运行时,系统会自动将其唤醒(或重新启动)   背景,以便它可以处理事件。在这种情况下,   选项字典传递给   application:didFinishLaunchingWithOptions:你的app委托方法   包含要指示的密钥UIApplicationLaunchOptionsLocationKey   您的应用程序是由于与位置相关的事件而启动的。中   重新启动过程,您必须重新创建您的位置管理器对象   并指派一个能够处理与地区相关的事件的代表。后   你这样做,系统提供区域通知   您的应用已启动。您之前配置的所有区域   在任何位置的monitoredRegions属性中都可用   你创建的经理对象。