2013-03-21 67 views
8

我正在开发使用Corebluetooth框架的应用程序,corebluetooth阅读RSSI错误:操作被取消

并连接到BLE装置来获得RSSI值。

我设置一个函数来periodly读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秒,

该p eripheralDidUpdateRSSI会随机报告错误信息是这样的:

The operation was cancelled. 

而如果率超过1.2sec它不会发生。

有没有人有任何想法更频繁地阅读RSSI值(0.5秒或更少)?

+0

也许会转而:peripheral.RSSI – 2013-09-12 13:38:57

+2

如果我只调用[外设RSSI]或peripheral.RSSI的RSSI是改变不了的。在调用[peripheral readRSSI]之后,该值将被更新。最后,我发现了固件定义读取频率极限的答案。 – momoyo 2013-12-02 10:42:52

+0

如果您使用BLE,请使用'didRangeBeacons:'。该设备每秒只能扫描很多次。 – random 2014-02-07 01:59:55

回答

0

我也遇到同样的问题。对我而言,只要在peripheralDidUpdateRSSI内添加sleep(2)即可。在初始化CBCentralManager时不要忘记使用后台队列。

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