Ho appena iniziato con il framework bluetooth principale per iOS e sto sviluppando un'app che ha bisogno di scansionare costantemente i dispositivi BLE in modo da poter recuperare il loro numero RSSI ogni minuto o così.Core Bluetooth - aggiornamenti costanti RSSI dei dispositivi di fascia alta
Attualmente ho:
manager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:FALSE], CBCentralManagerScanOptionAllowDuplicatesKey, nil];
[manager scanForPeripheralsWithServices:nil options:options];
questo inizia la mia scansione app per dispositivi BLE e chiama questo metodo delegato quando un dispositivo viene scoperto:
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI {
NSLog(@"Did discover peripheral. peripheral: %@ rssi: %@, UUID: %@ advertisementData: %@ ", peripheral, RSSI, peripheral.UUID, advertisementData);
//Do something when a peripheral is discovered.
rssiLabel.text = [RSSI stringValue];
[manager retrievePeripherals:[NSArray arrayWithObject:(id)peripheral.UUID]];}
questo metodo mi ottiene il numero di RSSI della periferica che posso mostrare L'ultima riga allora chiama questo metodo delegato:
- (void) centralManager:(CBCentralManager *)central didRetrievePeripherals:(NSArray *)peripherals {
NSLog(@"Currently known peripherals :");
int i = 0;
for(CBPeripheral *peripheral in peripherals) {
NSLog(@"[%d] - peripheral : %@ with UUID : %@",i,peripheral,peripheral.UUID);
}
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:FALSE], CBCentralManagerScanOptionAllowDuplicatesKey, nil];
[manager scanForPeripheralsWithServices:nil options:options];
}
Questo codice sembra funzionare e fare una scansione all'incirca ogni 1 minuto, ma io non so esattamente il motivo per cui lavora ...
La documentazione sul core bluetooth è piuttosto scarso quindi se qualcuno ha qualche idea su come farlo, o ha un modo migliore per fare ciò che sto cercando di realizzare, apprezzerei l'aiuto!
sembra funzionare ... Quanto spesso viene aggiornato il RSSI? EDIT: una volta al minuto?Penso che ci sia un timeout quando non ci si connette, in modo che ricomincia la scansione. – chwi
Ho appena iniziato la lettura della documentazione me stesso, così sei più avanti di me domanda, perché stai chiamando scanForPeripheralsWithServices nei didRetrievePeripherals metodo delegato? Si chiama già dopo l'assegnazione di CBCentralManager. Questo potrebbe causare la scansione ripetitiva che hai menzionato. – mkr707
solo i miei due centesimi per> = 7,0: retrievePeripheralsWithIdentifiers deve utilizzare da ora in poi. –