2

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

1.) 首先,我使用传入的外围设备(我的北欧设备)在 didDiscoverPeripheral() 委托方法中从我的北欧设备中检索了我的 NSUUID。我为我的北欧设备创建了一个自定义服务,所以假设这个外围设备是北欧设备。要检索我使用的 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

4 回答 4

6

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

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

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

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

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

于 2013-11-25T03:27:37.517 回答
0

我发现有时将空字符串(@“”)作为标识符会导致相同的亲

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

希望这会有所帮助

Z。

于 2014-04-10T13:42:08.907 回答
0

感谢 Duncan 评论“BLE 数据包中有问题”。我正在使用我不久前购买的一些 Estimote 信标。我也得到了一个空数组。当我使用 Estimote iOS 应用程序连接到他们时,它显示 Estimote 操作系统已经过时了。我使用该应用程序更新信标,它们开始在阵列中为我显示。

于 2014-10-02T21:31:55.490 回答
0

根据我的经验,如果您按照 Duncan 的说明进行操作,可能会出现一些问题,但仍然无法正常工作:

  • 如果您正在监控多个区域,则您创建的CLBeaconRegion需要具有唯一标识符。如果它们不是唯一的,那么didRangeBeacons将调用空数组信标。
  • 你不应该在一个区块中跟注startMonitoringForRegionand 。startRangingBeaconsInRegiondispatch_async
  • 如果仍然失败,请检查您centralManagerDidUpdateState在看到时重置监控的实现CBCentralManagerStatePoweredOn
于 2014-11-10T17:21:30.177 回答