我可以在iOS中测量蓝牙信号强度吗?

我想知道我可以测量我的iPhone范围内的蓝牙设备的信号强度。 基本上我想要做的是扫描范围内的设备列表,然后看哪一个具有最高的信号强度。 是否有可能在iOS中,如果是的话,我会怎么做?

是的,有一种方法可以测量Bluetooth Low Energy(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号码,当它连接。

看看CoreBluetooth文档 :

 - (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI { ... } 

RSSI是你在找什么。 免责声明:核心蓝牙仅适用于蓝牙4 LE。

如果确切的范围并不重要,但是您有兴趣扫描一般可用的设备,您可以看一下github项目BeeTee ,它允许您扫描周围的所有蓝牙设备(不仅仅是蓝牙LE)。 再次声明:我是BeeTee的作者。 😉

当您使用CBCentralManager编写“中央”代码时,您最终将连接到您正在寻找的CBPeripheral。 一旦连接到外设,请保留对其的引用,将对象设置为外设的委托,并在外设上调用“ readRSSI ”。 你会得到一个委托callback的外设:didReadRSSI:error:如果你写了一个调用“readRSSI”的方法,你可以使用performSelector:withObject:afterDelay:来调用它。

对这个问题的另一个build议的答案是在扫描时提供“允许重复”键。 传递给scanForPeripheralsWithServices:options:时,字典密钥CBCentralManagerScanOptionAllowDuplicatesKey的文档指示“禁用此筛选可能会对电池寿命产生不利影响,应仅在必要时使用”。

如果您select编写延迟调用,则可以调整呼叫频率以帮助您pipe理对用户电池的影响。