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

时间:2013-11-24 21:59:32

标签: ios iphone bluetooth ibeacon

我正在使用Nordic BLE nRF8001开发套件来测试CoreBluetooth。使用CBCentralManager的方法(例如didDiscoverPeripheral(),didConnectPeripheral()等)我的iPhone 5能够检测到Nordic设备的广告并正常连接。但是,我没有收到新的locationManager range或regionMonitoring方法的任何响应。下面我将解释我的设置:

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

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

2.。)接下来,我为我的Nordic设备创建一个信标区域并创建一个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设备,以便新的locationManager信标方法能够检测到它(例如BLE广告频率,功率电平等)?如果是这样,有人可以指向我的文档。

感谢帮助!

4 个答案:

答案 0 :(得分:6)

我一直认为,为了使用信标测距,你必须首先启动信标监控:

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

该代码对我来说很合适(另外,和你一样,我也设置了notifyEntryStateOnDisplay = YES)。

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

您也可以尝试下载Apple的AirLocate演示(它将同时监听信标并将您的iOS设备转换为信标。)您可以使用AirLocate查看它是否将您的自定义BLE设备识别为信标。如果是,则使用AirLocate作为信标进行传输,并查看您的代码是否识别它。

答案 1 :(得分:0)

我发现有时候一个空字符串(@“”)作为标识符将导致相同的专业

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

希望有帮助

Ž。

答案 2 :(得分:0)

感谢Duncan评论了BLE数据包中的错误信息"。我正在使用我刚买的一些Estimote信标。我也回来了一个空阵列。当我使用Estimote iOS应用程序连接它们时,它显示Estimote操作系统已过时。我使用该应用程序更新信标,他们开始在阵列中为我显示。

答案 3 :(得分:0)

根据我的经验,如果您遵循Duncan的指示并且仍然无效,可能会出现一些问题:

  • 如果要监控多个区域,则您创建的CLBeaconRegion需要具有唯一标识符。如果它们不是唯一的,那么将调用didRangeBeacons将清空数组信标。
  • 您不应在startMonitoringForRegion区块中致电startRangingBeaconsInRegiondispatch_async
  • 如果仍然失败,请在centralManagerDidUpdateState时检查您重置监控的CBCentralManagerStatePoweredOn实施。