我想知道我可以在iPhone范围内测量蓝牙设备的信号强度。基本上我想要做的是扫描范围内的设备列表,然后查看哪一个具有最高的信号强度。是否可以在iOS中使用,如果是这样,我该怎么做?
答案 0 :(得分:5)
是的,有一种方法可以测量蓝牙低功耗(4.0)的信号强度,它是RSSI编号。扫描外围设备时,您将标志CBCentralManagerScanOptionAllowDuplicatesKey设置为YES,如下所示:
NSDictionary * dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@YES, CBCentralManagerScanOptionAllowDuplicatesKey, nil];
// Start scanning for peripherals
[cmanager scanForPeripheralsWithServices:nil options:dictionary];
如果您希望在不编写任何代码的情况下查看RSSI号码,请查看iTunes中的应用LightBlue。当您连接到外围设备时,它会在连接时每秒显示更新的RSSI编号。
答案 1 :(得分:2)
查看CoreBluetooth documentation:
- (void)centralManager:(CBCentralManager *)central
didDiscoverPeripheral:(CBPeripheral *)peripheral
advertisementData:(NSDictionary *)advertisementData
RSSI:(NSNumber *)RSSI
{ ... }
RSSI正是您要找的。免责声明:核心蓝牙仅适用于蓝牙4 LE。
如果确切范围无关紧要,但您对扫描一般可用的设备感兴趣,可以查看github项目BeeTee,它允许您扫描周围的所有蓝牙设备(不仅是蓝牙LE)。免责声明:我是BeeTee的作者。 ; - )
答案 2 :(得分:0)
当您对中心'进行编码时使用CBCentralManager的代码,您最终将连接到您正在寻找的CBPeripheral。一旦您连接到外围设备,请保留对它的引用,将您的对象设置为外围设备的代理并调用“readRSSI”。在外围设备上。您将获得委托回调peripheral: didReadRSSI: error:如果您编写了一个调用' readRSSI'的方法,您可以使用performSelector: withObject: afterDelay:调用它。
这个问题的另一个建议答案是提供“允许重复”和“重复”。扫描时键。传递给CBCentralManagerScanOptionAllowDuplicatesKey时字典键scanForPeripheralsWithServices:options:的文档表明"禁用此过滤可能会对电池寿命产生负面影响,只应在必要时使用"。
如果您选择编写延迟调用,则可以调整通话频率,以帮助您管理对用户的影响。电池。