我有显示几个警告的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];
    }
}


* rssi是一个静态整数。

* isConnected是一个布尔值。

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

最佳答案

有两种获取CBPeripheral的RSSI的方法。首先是发现外围设备时。您将调用CBCentralManagerDelegate方法

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


如果在前台运行,则可以在扫描选项中为键true提供CBCentralManagerScanOptionAllowDuplicatesKey的值,以重复调用didDiscover。这在后台不起作用。

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

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

关于ios - 如何在iOS9中获取RSSI,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43422247/

10-10 21:48