Jon*_*han 8 peripherals bluetooth ios core-bluetooth bluetooth-lowenergy
低功耗蓝牙规范并未说明外设是否可以一次连接到多个中心,但我的测试经验告诉我他们不能.
因为我的应用程序需要与外围设备的非占有关系(即没有连接,这会阻止其他连接),并且需要不断更新其RSSI值,我正在寻找一种方法来连续扫描外设并捕获它们的RSSI值.
scanForPeripheralsWithServices方法似乎扫描一定的间隔然后停止.我相信我最好的选择是一次扫描3秒,stopScan,等待(几秒钟),然后重新开始扫描.重复.
任何人都可以指出一种更好的方法吗?例如,配置外围设备以连接到多个Central?
外围设备无法连接到多个中心.但是如果你需要捕获RSSI,那么你甚至不需要连接.扫描设备可以使用此功能检索RSSI:
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
Run Code Online (Sandbox Code Playgroud)
至于上一个答案,如果您只对RSSI感兴趣,可以直接将其放入委托方法:
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
Run Code Online (Sandbox Code Playgroud)
BTW,默认情况下,CBCentralManager只会调用此方法一次.如果你需要这个回调被称为每次时间CBCentralManager接收到广播数据包,你需要启动与扫描选项CBCentralManagerScanOptionAllowDuplicatesKey设置为YES:
NSDictionary *scanningOptions = @{CBCentralManagerScanOptionAllowDuplicatesKey: @YES};
[centralManager scanForPeripheralsWithServices:nil options:scanningOptions];
Run Code Online (Sandbox Code Playgroud)
请注意,如果不是绝对必要,Apple会阻止使用此选项.
请参阅:iOS Developer Library - 与远程外围设备交互的最佳实践
| 归档时间: |
|
| 查看次数: |
6190 次 |
| 最近记录: |