2013-03-21 63 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]; 
}