2013-10-02 24 views

回答

3

简答:不,没有任何iOS设备可以监控iBeacons,但不能对它们进行排序。如果isMonitoringAvailableForClass被赋予一个CLBeaconRegion实例,那么这两个方法都会返回相同的值。

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

+0

这是绝对正确的。对于4S +设备 - 信标监测和测距都可用。如果您不想处理CLBeaconRegion,仍然可以使用CLRegion类。否则,你应该使用新的CLBeaconRegion和CLCircularRegion类 – manishnath

+0

感谢,它只是似乎很奇怪,我认为有用于检查为一个单独的方法。如果将来不适用,我仍然在每个用例中使用相应的检查。 –

+0

了解。但从API开发人员的角度来考虑它。要求用户调用[CLLocationManager isMonitoringAvailableForClass:[CLBeaconRegion class]]来查看测距是否可用,是不是有点笨拙?据我所知,[CLLocationManager isRangingAvailable]就是围绕上述的包装,使API看起来更干净。无可否认,这只是猜想。 – davidgyoung

1

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

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

在“决定区监测的可用性”部分苹果位置和地图编程指南

试图监视的任何区域之前,您的应用程序应该检查 区域监控是否支持在当前设备。这里有 一些原因,区域监控可能无法使用:

  • 设备不具备必要的硬件来支持区域监测。
  • 用户拒绝该应用使用区域监控的授权。
  • 用户在“设置”应用程序中禁用了位置服务。
  • 用户在设置应用程序中为设备或应用程序禁用了后台应用程序刷新。
  • 设备处于飞行模式,无法启动必要的硬件。

(我加粗的第四个项目符号点,因为这是我说的情况。)

测距,但是,只有一个前台活动使后台应用刷新设置不重要。

在这种情况下,区域监控将不可用,但范围将可用。

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

我希望苹果能够在接下来的几次更新中修复[[CLLocationManager isMonitoringAvailableForClass:[CLBeaconRegion class]]的误报。

相关问题