7

我可以测量iPhone 范围内蓝牙设备的信号强度吗?

基本上我想做的是扫描范围内的设备列表,然后查看哪个设备的信号强度最高。

在iOS中是否有可能,如果可以,我该怎么做?

4

3 回答 3

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 编号。

于 2012-11-20T03:57:48.897 回答
2

查看CoreBluetooth 文档

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

RSSI是您正在寻找的。免责声明:核心蓝牙仅适用于蓝牙 4 LE。

如果确切的范围无关紧要,但您对扫描一般可用的设备感兴趣,您可以查看 github 项目BeeTee,它允许您扫描您周围的所有蓝牙设备(不仅仅是蓝牙 LE)。再次免责声明:我是 BeeTee 的作者。;-)

于 2015-10-21T07:35:34.457 回答
0

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

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

如果您选择编写延迟调用,则可以调整调用频率以帮助您管理对用户电池的影响。

于 2017-04-12T01:34:56.213 回答