【问题标题】:How to get RSSI in iOS9如何在 iOS9 中获取 RSSI
【发布时间】:2017-04-15 04:38:35
【问题描述】:

我有显示多个警告的 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 是一个布尔值。

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

【问题讨论】:

标签: ios objective-c ios9 core-bluetooth


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

    迅速 3

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

    【讨论】:

      猜你喜欢
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-16
      • 2021-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多