如何在 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的主要内容,如果未能解决你的问题,请参考以下文章