locationManager:didRangeBeacons方法未检测到BLE设备

我正在使用Nordic BLE nRF8001开发套件来testingCoreBluetooth。 使用CBCentralManager的方法(例如didDiscoverPeripheral(),didConnectPeripheral()等), 我的iPhone 5能够检测到北欧设备的广告,并连接到它就好了 。 但是,我没有收到来自新的locationManager范围或regionMonitoring方法的任何响应。 下面我会解释我的设置:

1.)首先,我使用传入的外围设备(我的北欧设备),在didDiscoverPeripheral()委托方法中从我的Nordic设备中检索到我的NSUUID。 我为我的北欧设备创build了一个自定义服务,所以假设这个外设是北欧设备。 检索我使用的NSUUID:

NSUUID *uuid = [peripheral identifier]; NSString *uuidString = [uuid UUIDString]; //uuidString = 9A8D4C73-152D-BBDA-E4C2-9CE952654645 

)接下来,我为北欧设备创build一个信标区域,并创build一个CLLocationManager:

  self.locationManagerBeacon = [[CLLocationManager alloc] init]; [self.locationManagerBeacon setDelegate:self]; NSUUID *myUUID = [[NSUUID alloc] initWithUUIDString:@"9A8D4C73-152D-BBDA-E4C2-9CE952654645"]; self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:myUUID identifier:@"nordicRegion"]; self.beaconRegion.notifyEntryStateOnDisplay = YES; 

3.)现在我开始监测信标区域

 [self.locationManagerBeacon startRangingBeaconsInRegion:self.beaconRegion]; 

4.) 问题 :locationManager:didRangeBeacons:inRegion被调用,但信标区域总是空的。

问题:Nordic BLE设备是否需要以某种方式进行configuration,以便新的locationManager信标方法能够检测到它(例如,BLE广告频率,功率级别等)? 如果是这样,有人可以指向我的文档。

感谢帮助!

我一直认为,为了使用信标范围,您必须首先启动信标监测:

 [theLocManager startMonitoringForRegion: region1]; [theLocManager startRangingBeaconsInRegion: region1]; 

该代码对我来说工作得很好(另外,像你一样,我也设置了notifyEntryStateOnDisplay = YES)。

尝试一下,看看它是否有所作为。 如果不这样做,我会说你在广播的BLE数据包中有什么问题,可以作为信标广告。

您也可以尝试下载苹果公司的AirLocate演示程序(既可以监听信标,又可以将iOS设备转变为信号灯)。您可以使用AirLocate来查看是否将自定义BLE设备识别为信标。 如果是,则使用AirLocate作为信标进行传输,并查看您的代码是否能识别它。

我发现有时有一个空string(@“”)作为标识符将导致相同的亲

 region = [[CLBeaconRegion alloc] initWithProximityUUID:UUID identifier:[UUID UUIDString]]; 

希望有帮助

Z.

感谢Duncan评论“BLE数据包中的错误”。 我刚才使用了一些我刚买的Estimote信标。 我也回来了一个空arrays。 当我使用Estimote iOS应用程序连接到它们时,它显示Estimote操作系统已经过期。 我使用应用程序来更新信标,他们开始在arrays中显示给我。

根据我的经验,如果遵循Duncan的指示,有些事情可能会出错,但仍然不起作用:

  • 如果您正在监视多个区域,则您创build的CLBeaconRegion需要具有唯一的标识符。 如果它们不是唯一的,那么将会调用didRangeBeacons将空数组信标。
  • 您不应该在dispatch_async块中调用startMonitoringForRegionstartRangingBeaconsInRegion
  • 如果仍然失败,请在您看到CBCentralManagerStatePoweredOn时检查您重置监视的CBCentralManagerStatePoweredOn