如何在iOS9中获取RSSI



我有显示多个警告的BLE源代码,我是新手唔。请参阅下面的代码。我尝试用readRSSI替换,但告诉我我无法将Int与Void进行比较。如何获取读取 RSSI 的 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 是一个布尔值。

编辑:问题是RSSI自iOS 8.0以来已被弃用。

有两种

方法可以获取CBPeripheral的RSSI。 首先是发现外围设备时。 你将收到对CBCentralManagerDelegate方法的调用

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

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

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

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

swift 3

@IBAction func btnGetRSSI(_ sender: UIButton){
    self.selectedPeripehral.readRSSI() 
}
func peripheral(_ peripheral: CBPeripheral, didReadRSSI RSSI: NSNumber, error: Error?) {
    var rssiInt: Int!
    rssiInt = RSSI.intValue
}

最新更新