【问题标题】:iOS beacon region monitoring require to enable bluetoothiOS信标区域监控需要启用蓝牙
【发布时间】:2017-11-02 06:42:23
【问题描述】:

我正在开发一个具有信标区域监控的应用程序。以下是监控信标区域的代码。

-(void)setBeaconMonitoringForUUID:(NSString *)strID withMajor:(NSString *)strMajor withMinor:(NSString *)strMinor withIdentifier:(NSString *)strIdentifier {
    NSUUID *strUUID = [[NSUUID alloc] initWithUUIDString:strID];
    CLBeaconRegion *beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:strUUID major:[strMajor intValue] minor:[strMinor intValue] identifier:strIdentifier];
    [beaconRegion setNotifyEntryStateOnDisplay:YES];
    [beaconRegion setNotifyOnEntry:YES];
    [beaconRegion setNotifyOnExit:YES];
    [self.objLocationManager startMonitoringForRegion:beaconRegion];    
    [self.objLocationManager startRangingBeaconsInRegion:beaconRegion];}

locationManager初始化如下

- (id)init
{
   self = [super init];
   if (self != nil)
   {
      self.objLocationManager = [CLLocationManager new];
      self.objLocationManager.delegate = self;
      self.objLocationManager.distanceFilter = 10.0;
      self.objLocationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
      self.objLocationManager.allowsBackgroundLocationUpdates = YES;

      if ([self.objLocationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
        [self.objLocationManager requestAlwaysAuthorization];
      }    
      [self.objLocationManager startUpdatingLocation];

  }
  return self;
}

现在的问题是为了监控信标区域,iOS 设备必须启用蓝牙或它在不打开蓝牙的情况下工作?我也参考了下面的链接,但没有关于启用蓝牙以进行区域监控的说明 Determining the Availability of Region Monitoring

我已经对 kontakt.io 信标进行了测试,如果不打开设备上的蓝牙,它就无法工作,但是当我读到区域监控正在使用位置服务时,那么为什么我们需要启用蓝牙。所以每个信标都需要打开蓝牙或它是特定于 kontakt.io 信标的吗?

【问题讨论】:

  • 是的,当然。信标仅适用于蓝牙。因为与其他无线网络相比,蓝牙使用的电池非常少。当你的手机到达它的范围时,它会对你的手机执行它的操作。

标签: ios objective-c bluetooth core-location ibeacon


【解决方案1】:

Apple 在 iOS 11 中进行了更改,即使用户在控制中心禁用蓝牙,操作系统仍会执行对 iBeacon 设备的扫描和检测。 (控制中心是您在 iOS 上通过从屏幕底部向上滑动获得的快速访问窗格。)请参阅此处了解更多详细信息:https://support.apple.com/en-us/HT208086

上述说法不适用于 iOS 10.x 及更早版本,在控制中心关闭蓝牙将禁用信标检测。正如@Paulw11 在他的回答中所说,您还必须在手机上启用定位功能,并且该应用必须先从该应用获得动态定位许可,然后才能检测到信标。

同样在所有版本的 iOS 上,如果您转到设置 -> 蓝牙并禁用蓝牙,它将禁用信标检测。

【讨论】:

  • 所以对于所有版本的 iOS 我都需要检查权限位置和蓝牙以检测信标?
  • 是的,但确切地说,蓝牙在 iOS 上并不是一个权限,它是一个设置。它必须开启。位置既是一种设置,也是一种许可。必须启用位置信息,并且必须向您的应用授予位置信息权限。
  • @davidgyoung 首先,您是说在 iOS 11 上,即使用户在控制中心禁用蓝牙,仍然会执行对信标设备的扫描,然后您说相反,如果蓝牙被禁用在设置中它不会执行扫描。我很确定控制中心和设置中的切换不会被系统以不同的方式处理。如果是,你有什么证据证明这种奇怪的行为吗?
  • 我的答案中的链接显示了 Apple 关于控制中心新 iOS 11 行为的文档。
【解决方案2】:

iBeacons 使用蓝牙低功耗来宣传自己,因此 iOS 设备上的蓝牙设置必须打开才能接收信号。

由于信标的检测可用于通过将信标的检测与信标的已知位置相关联来确定用户的位置,因此您必须获得用户的许可才能使用其位置。

【讨论】:

  • 感谢您的回答,我已经检查了 estimote 信标,即使设备上的蓝牙关闭,它也会触发进入/退出区域事件。所以混淆是信标到信标的不同特征吗?
  • 不,没有蓝牙,任何信标都无法工作。一些框架可能使用CLCircularRegions,它使用GPS和Cell/WiFi定位以及CLBeaconRegions,但如果是纯CLBeaconRegion则需要蓝牙。
猜你喜欢
  • 2015-06-03
  • 2016-03-29
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多