2013-03-21 2 views
8

Я занимаюсь разработкой приложения с использованием базы Corebluetooth,corebluetooth Чтение RSSI ошибка: Операция была отменена

и подключить к BLE устройство, чтобы получить значение RSSI.

Я установил функцию для чтения RSSI periodly, код таймера ниже

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 –

+2

ПМПС не изменится, если я только называю [периферическое RSSI] или peripheral.RSSI. Значение будет обновлено после вызова [externalal readRSSI]. Наконец, я нашел ответ, что ограничение частоты чтения определяется прошивкой. – momoyo

+0

Если вы используете BLE, используйте 'didRangeBeacons:'. Устройство будет сканировать столько раз в секунду. – random

ответ

0

У меня такая же проблема. Для меня это работает, когда я просто добавляю sleep(2) внутри peripheralDidUpdateRSSI. Просто не забудьте использовать фоновый режим при инициализации CBCentralManager.

- (void)peripheralDidUpdateRSSI:(CBPeripheral *)peripheral error:(NSError *)error 
{ 
    NSLog(@"RSSI = %@", peripheral.RSSI); 
    sleep(2); 
    [self.connectedPeripheral readRSSI]; 
} 
Смежные вопросы