是否有iOS设备可以监控iBeacons而不是它们的范围?

时间:2013-10-02 19:07:50

标签: ios7 cllocationmanager ibeacon

或者问另一种方式

[CLLocationManager isMonitoringAvailableForClass:[CLBeaconRegion class]]

[CLLocationManager isRangingAvailable]

永远会回归不同的价值观吗?

2 个答案:

答案 0 :(得分:4)

简短回答:不,没有任何iOS设备可以监控iBeacons,但不能对它们进行测距。如果isMonitoringAvailableForClass被赋予CLBeaconRegion实例,则两种方法都将返回相同的值。

API看起来这样的原因是因为可以使用CLBeaconRegion类以外的类调用isMonitoringAvailableForClass方法。 CLCircularRegion用于监控地理围栏区域。在没有LE蓝牙的设备上传递CLBeaconRegion时,该方法可能返回NO,在同一设备上传递CLCircularRegion时返回YES。

答案 1 :(得分:2)

我相信有一种情况,[CLLocationManager isMonitoringAvailableForClass:[CLBeaconRegion class]]将返回NO而[CLLocationManager isRangingAvailable]将返回YES

如果关闭后台应用刷新,[CLLocationManager isMonitoringAvailableForClass:[CLBeaconRegion class]]应返回NO

在Apple的位置和地图编程指南下的“确定区域监控的可用性”部分下:

  

在尝试监控任何地区之前,您的应用应该检查   当前设备是否支持区域监控。这是   可能无法进行区域监测的一些原因:

     
      
  • 设备没有必要的硬件来支持区域监控。
  •   
  • 用户拒绝了应用程序使用区域监控的授权。
  •   
  • 用户在“设置”应用中禁用了位置服务。
  •   
  • 用户在设置应用中停用了背景应用刷新,适用于设备或应用。
  •   
  • 设备处于飞行模式,无法启动必要的硬件。
  •   

(我加粗了第四个要点,因为我正在谈论的情况。)

然而,测距仅是前景活动,因此后台应用刷新设置并不重要。

在这种情况下,区域监控将不可用,但可以进行测距。

注意:目前,当启用后台应用刷新时,[[CLLocationManager isMonitoringAvailableForClass:[CLBeaconRegion class]]会返回YES,但当您开始监控时,您将永远不会收到通知,如果您致电{{1然后将在CLLocationManager的委托上调用requestStateForRegion:。 错误消息将是“操作无法完成”。错误代码为4,通过locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error转换为CLError.h

我希望Apple能够在接下来的几次更新中解决kCLErrorRegionMonitoringDenied中的误报。