我有 8.0,它工作正常。
-(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;
}
由于上述在 iOS 8 中已被弃用,尝试其他委托,将报告。
-(void) peripheral:(CBPeripheral *)peripheral didReadRSSI:(NSNumber *)RSSI error:(NSError *)error {
NSLog(@"Got RSSI update in didReadRSSI : %4.1f", [RSSI doubleValue]);
}
这似乎是一个 OSX 委托方法。 Apple 可能很快会在 iOS 中为 RSSI 添加一些东西。
在 iOS 8.0 中,didReadRSSI 可以正常工作。在 8.0.2 文档中,它没有在 iOS 下列出。
如果我将这两种方法都放在 iOS 8 中调用 didReadRSSI 和在 iOS 7 中调用 peripheralDidUpdateRSSI。
因此,在 Apple 为 RSSI 提供一些东西之前,请不要更新到 iOS 8.0.2。
有人试用过 iOS 8.1 测试版吗?
扫描设备时似乎无法读取 RSSI。如果已启动对 [CBCentralManager scanForPeripheralsWithServices...] 的调用,则不会发生 ReadRSSI 的影响(不调用委托)。但是如果发出 [CBCentralManager stopScan],ReadRSSI 就会开始响应。
另请注意:设备必须处于连接状态才能发出命令,否则您将获得:
CoreBluetooth[API MISUSE] CBPeripheral 只能在连接状态下接受命令。