2012-10-23 179 views
6

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

回答

5

是的,有一种方法可以测量蓝牙低功耗(4.0)的信号强度,它是RSSI编号。如果你想看到的RSSI数量的工作,而无需编写你应该在iTunes中检查出的应用程序LightBlue任何代码

NSDictionary * dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@YES, CBCentralManagerScanOptionAllowDuplicatesKey, nil]; 

// Start scanning for peripherals 
[cmanager scanForPeripheralsWithServices:nil options:dictionary]; 

:当你扫描外设,你会标志CBCentralManagerScanOptionAllowDuplicatesKey设置为YES,如下图所示。当连接到外围设备时,它会在连接时每秒向您显示更新的RSSI号码。

2

看一看到CoreBluetooth documentation

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

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

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

0

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

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

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