如何在 iOS9 中获取 RSSI

Posted

技术标签:

【中文标题】如何在 iOS9 中获取 RSSI【英文标题】:How to get RSSI in iOS9 【发布时间】: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 以来已被弃用。

【问题讨论】:

静态 rssi 笼子到 NSNumber *rssi = peripheral.RSSI; 你试过......你面临什么问题......? 这能回答你的问题吗? iOS 8 CoreBluetooth deprecated RSSI methods 【参考方案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


【讨论】:

以上是关于如何在 iOS9 中获取 RSSI的主要内容,如果未能解决你的问题,请参考以下文章

如何获取已连接蓝牙设备的 rssi 值

如何在android中测量NFC RSSI?

如何在Android中测量NFC RSSI?

在 Apple Watch 上获取 RSSI

React Native、IBECONS、RSSI 值到距离的转换

从 Windows 上的 RSSI 检测蓝牙信号强度