iOS信标区域监控需要启用蓝牙

iOS信标区域监控需要启用蓝牙,ios,objective-c,bluetooth,core-location,ibeacon,Ios,Objective C,Bluetooth,Core Location,Ibeacon,我正在开发一个具有信标区域监控的应用程序。下面是监控信标区域的代码 -(void)setBeaconMonitoringForUUID:(NSString *)strID withMajor:(NSString *)strMajor withMinor:(NSString *)strMinor withIdentifier:(NSString *)strIdentifier { NSUUID *strUUID = [[NSUUID alloc] initWithUUIDString:st

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

-(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设备必须启用蓝牙或在不启用蓝牙的情况下工作。我也参考了下面的链接,但没有关于启用蓝牙进行区域监控的说明


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

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


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

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


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

苹果在iOS 11中做了一项更改,这样即使用户在Control Center中禁用蓝牙,iBeacon设备的扫描和检测仍由操作系统执行。(Control Center是通过在iOS上从屏幕底部向上滑动获得的快速访问窗格。)有关更多详细信息,请参阅此处:

对于iOS 10.x及更早版本,上述声明不适用,在iOS 10.x及更早版本中,在Control Center中关闭蓝牙将禁用信标检测。正如@Paulw11在他的回答中所说的,你还必须在手机上启用位置,并且应用程序必须从应用程序获得动态位置权限,然后才能检测到信标


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

苹果在iOS 11中做了一项更改,因此即使用户在Control Center中禁用蓝牙,iBeacon设备的扫描和检测仍由操作系统执行。(Control Center是通过在iOS上从屏幕底部向上滑动获得的快速访问窗格。)有关更多详细信息,请参阅此处:

对于iOS 10.x及更早版本,上述声明不适用,在iOS 10.x及更早版本中,在Control Center中关闭蓝牙将禁用信标检测。正如@Paulw11在他的回答中所说的,你还必须在手机上启用位置,并且应用程序必须从应用程序获得动态位置权限,然后才能检测到信标


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

是的,当然。信标仅在蓝牙上工作。因为与其他无线网络相比,蓝牙使用的电池非常少。当您的手机到达它的范围时,它将对您的手机执行操作。@DipakKacha如果beacon仅在蓝牙上工作,则说明我们为什么需要请求位置“始终”或“使用时”以及didEnterRegion和didExitRegion方法来自CLLocationManager。是的,绝对正确。信标仅在蓝牙上工作。因为与其他无线网络相比,蓝牙使用的电池非常少。当您的手机到达其范围时,它将对您的手机执行操作。@DipakKacha如果beacon仅在蓝牙上工作,则说明我们为什么需要请求位置“始终”或“使用时”didEnterRegion和didExitRegion方法来自CLLocationManager。感谢您的回答,我已与estimote beacon进行了检查,即使设备上的蓝牙已关闭,它也会触发进入/退出区域事件。因此,混淆的是,不同的信标具有不同的特征吗?不,没有蓝牙,任何信标都无法工作。一些框架可能使用
CLCircularRegion
s,使用GPS和蜂窝/WiFi定位以及
CLBeaconRegion
s,但如果是纯
CLBeaconRegion
,则需要蓝牙。感谢您的回答,我已与estimote beacon进行了检查,即使设备上的蓝牙已关闭,它也会触发进入/退出区域事件。因此,混淆的是,不同的信标具有不同的特征吗?不,没有蓝牙,任何信标都无法工作。一些框架可能使用
CLCircularRegion
s,它使用GPS和蜂窝/WiFi位置以及
CLBeaconRegion
s,但如果它是纯
CLBeaconRegion
,则需要蓝牙。因此,对于所有版本的iOS,我都需要检查权限位置和蓝牙以检测信标?是的,但准确地说,蓝牙不是iOS上的权限,它是一种设置。它一定是开着的。位置既是一种设置,也是一种权限。Location必须处于打开状态,并且必须向您的应用程序授予Location权限。@DavidYoung首先,您是说在iOS 11上,即使用户在Control Center中禁用蓝牙,也会执行对信标设备的扫描,然后您是说相反,如果在settings中禁用蓝牙,则不会执行扫描。我很确定控制中心和设置中的切换不会被系统以不同方式处理。如果是的话,你有证据证明这种奇怪的行为吗?我回答中的链接显示了苹果公司关于Control Center上新的iOS 11行为的文档。因此,对于所有版本的iOS,我都需要检查权限位置和蓝牙以检测信标?是的,但准确地说,蓝牙不是iOS上的权限,它是一种设置。它一定是开着的。位置既是一种设置,也是一种权限。“位置”必须处于启用状态,并且必须向您的应用程序授予“位置”权限。@DavidYoung首先您是这么说的