我正在使用Corebluetooth框架开发应用程序,

并连接到BLE设备以获取RSSI值。

我设置了一个定期读取RSSI的函数,计时器代码如下

NSTimer *timer;
timer = [NSTimer scheduledTimerWithTimeInterval:1.2f target:self selector:@selector(detectRSSI) userInfo:nil repeats:YES];

并且detectRSSI代码在下面
- (void)detectRSSI
{
    [self.peripheral readRSSI];
}

所以问题是

该功能运行良好,但是当我将时间间隔设置为小于1.2秒时,

pheralDidUpdateRSSI将随机报告错误消息,如下所示:
The operation was cancelled.

如果速率超过1.2秒,则不会发生。

是否有人想更频繁地(0.5秒或更短)读取RSSI值?

最佳答案

我也遇到同样的问题。对我来说,当我在sleep(2)中简单地添加peripheralDidUpdateRSSI时,它就可以工作。只是不要忘记在初始化CBCentralManager时使用后台队列。

- (void)peripheralDidUpdateRSSI:(CBPeripheral *)peripheral error:(NSError *)error
{
    NSLog(@"RSSI = %@", peripheral.RSSI);
    sleep(2);
    [self.connectedPeripheral readRSSI];
}

关于ios - corebluetooth读取RSSI错误:The operation was cancelled,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15540481/

10-12 06:01