8

我正在使用 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 秒时,

peripheralDidUpdateRSSI 会随机报如下错误信息:

The operation was cancelled.

如果速率超过 1.2 秒,则不会发生这种情况。

有谁知道更频繁地读取 RSSI 值(0.5 秒或更短)?

4

1 回答 1

0

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

- (void)peripheralDidUpdateRSSI:(CBPeripheral *)peripheral error:(NSError *)error
{
    NSLog(@"RSSI = %@", peripheral.RSSI);
    sleep(2);
    [self.connectedPeripheral readRSSI];
}
于 2014-02-21T13:54:28.040 回答