我的应用程序上有两个开关,它们可以将我的应用程序转换为外围设备或中央设备(BLE连接中的两个角色)。当应用程序角色作为外围设备时,我初始化两个CBPeripheralManagers,一个用于广告ibeacon和另一个对于BLE连接。我想做的是当另一个设备角色作为中心进入外围设备的范围时,它可以检测到信标,同时,它扫描外围设备,然后连接到外围设备。当连接建立时,中央将一些数据发送到外围设备。
这是我的问题:
我这样初始化外围设备:
_peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil]; // for BLE connection
_beaconPeripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
_beaconPeripheralData = [self.beaconRegion peripheralDataWithMeasuredPower:nil];
_beaconPeripheralManager startAdvertising:_beaconPeripheralData;
[_peripheralManager startAdvertising:@{ CBAdvertisementDataServiceUUIDsKey : @[[CBUUID UUIDWithString:UUID]] }];
init central就像这样:
NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:UUID];
_beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:@"com.nikotung.ibeacon"];
[_locationManager startMonitoringForRegion:self.beaconRegion];
_centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
[_centralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:UUID],[CBUUID UUIDWithString:BEACON_UUID]]
options:@{ CBCentralManagerScanOptionAllowDuplicatesKey : @YES }];
如果我同时宣传两个外围设备,在中央端,我永远不会发现外围设备(_peripheralManager
)而只发现信标(_beaconPeripheralManager
)。
代表
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
从未打过电话。
但如果我只打开_peripheralManager
广告,中央方可以发现它并委托被召集。
这是否意味着我们不能同时宣传两个外围设备,或者日期大小有限。
从Apple的文档中可以看出只有两个键CBAdvertisementDataLocalNameKey
和CBAdvertisementDataServiceUUIDsKey
可以做广告。但我发现_beaconPeripheralData
包含一个让我感到困惑的键kCBAdvDataAppleBeaconKey
。< / p>
因此,我可以做些什么来制作应用程序,可以宣传两个外围设备并正常工作。
答案 0 :(得分:0)
i 组合信标和外围设备的广告数据,并将其与1个外设管理器实例一起使用;它似乎适用于iOS(7.0),但不适用于OSX(10.9)
答案 1 :(得分:0)
信标外围数据和描述您的BLE服务的外围数据都是 NSDictionary ,您可以通过 NSMutableDictionary 将这两者合并为一个并将需求数据广播为一个