我有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。
答案 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
}