如何在 iOS9 中获取 RSSI

Wen*_* Wu 0 objective-c ios core-bluetooth ios9

我有显示几个警告的 BLE 源代码,我是 BLE 的新手。请看下面的代码。我曾尝试用 readRSSI 替换,但告诉我我无法将 Int 与 Void 进行比较。如何获得 readRSSI 的 Int 值?或者我应该如何更改代码?

- (void)peripheralDidUpdateRSSI:(CBPeripheral * _Nonnull)peripheral error:(NSError * _Nullable)error
{
    if (!isConnected)
        return;
    if (rssi != peripheral.RSSI.intValue)
    {
        rssi = peripheral.RSSI.intValue;
        [[self delegate] bleDidUpdateRSSI:activePeripheral.RSSI];
    }
}
Run Code Online (Sandbox Code Playgroud)

*rssi 是一个静态整数。

*isConnected 是一个布尔值。

编辑:问题是自 iOS 8.0 起不推荐使用 RSSI。

Pau*_*w11 5

有两种方法可以获取CBPeripheral的RSSI。第一个是当外围设备被发现时。您将收到对该CBCentralManagerDelegate方法的调用

func centralManager(_ central: CBCentralManager, 
             didDiscover peripheral: CBPeripheral, 
       advertisementData: [String : Any], 
                    rssi RSSI: NSNumber) {
    let rssi = intValue
    ...
}
Run Code Online (Sandbox Code Playgroud)

如果您在前台运行,那么您可以trueCBCentralManagerScanOptionAllowDuplicatesKey扫描选项中的键提供值to以重复调用didDiscover. 这在后台不起作用。

如果您连接到外围设备,那么您可以定期调用peripheral.readRSSI(). 这将导致对didReadRSSI CBPeripheralDelegate方法的回调:

optional func peripheral(_ peripheral: CBPeripheral, 
         didReadRSSI RSSI: NSNumber, 
               error: Error?) {
    let rssi = RSSI.intValue
    ...
}
Run Code Online (Sandbox Code Playgroud)