我正在使用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广告频率,功率电平等)?如果是这样,有人可以指向我的文档。
感谢帮助!
答案 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
区块中致电startRangingBeaconsInRegion
和dispatch_async
。centralManagerDidUpdateState
时检查您重置监控的CBCentralManagerStatePoweredOn
实施。