I got a problem since the iOS 8 update, right now my app is connected to a BLE device and periodically reads the RSSI thanks to a timer and the ReadRSSI
method.
I have 8.0, it's working fine.
-(void) startScanForRSSI{
timerRSSI = [NSTimer scheduledTimerWithTimeInterval:10.0f target:self selector:@selector(detectRSSI) userInfo:nil repeats:YES];
}
- (void)detectRSSI {
if (state == ...) {
peripheral.delegate = self;
[peripheral readRSSI];
} else {
if (timerRSSI && [timerRSSI isValid]) {
[timerRSSI invalidate];
}
}
}
- (void)peripheralDidUpdateRSSI:(CBPeripheral *)peripheral error:(NSError *)error {
NSLog(@"Got RSSI update: %4.1f", [peripheral.RSSI doubleValue]);
NSNumber *rssiNum = peripheral.RSSI;
}
Since above is deprecated in iOS 8, trying the other delegate, will report back.
-(void) peripheral:(CBPeripheral *)peripheral didReadRSSI:(NSNumber *)RSSI error:(NSError *)error {
NSLog(@"Got RSSI update in didReadRSSI : %4.1f", [RSSI doubleValue]);
}
This seems to be an OSX delegate method. Apple will probably add something soon in iOS for RSSI.
In iOS 8.0 didReadRSSI is working. In 8.0.2 documentation it is not listed under iOS.
If I put both methods didReadRSSI gets called in iOS 8 & peripheralDidUpdateRSSI gets called in iOS 7.
So don't update to iOS 8.0.2 until Apples puts something for RSSI.
Did anyone try iOS 8.1 beta?
Looks like when scanning for devices the RSSI can't be read. If the call to [CBCentralManager scanForPeripheralsWithServices...] has been initiated no effect of ReadRSSI occurs (no delegates are called). But if the [CBCentralManager stopScan] is issued the ReadRSSI starts responding.
Also note: the device has to be in connected state to issue commands otherwise you will get: CoreBluetooth[API MISUSE] CBPeripheral can only accept commands while in the connected state.