如何在iOS9中获取RSSI

时间:2017-04-15 04:38:36

标签: ios objective-c ios9 core-bluetooth

我有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是一个静态int。

* isConnected是一个布尔值。

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

2 个答案:

答案 0 :(得分:2)

有两种方法可以获得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
    ...
}

答案 1 :(得分:0)

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

}