Acabo de comenzar con el framework core bluetooth para iOS y estoy desarrollando una aplicación que necesita buscar constantemente dispositivos BLE para que pueda recuperar su número RSSI cada minuto o asi que.Bluetooth básico: actualizaciones constantes de RSSI de dispositivos dentro del rango
Actualmente tengo:
manager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:FALSE], CBCentralManagerScanOptionAllowDuplicatesKey, nil];
[manager scanForPeripheralsWithServices:nil options:options];
esto empieza mi escaneo de aplicaciones para dispositivos BLE y llama a este método delegado cuando se descubre un dispositivo:
- (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]];}
este método me pone número de RSSI del dispositivo encargado puedo mostrar. La última línea a continuación, llama a este método delegado:
- (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];
}
Este código parece estar funcionando y hacer una exploración más o menos cada 1 minuto, pero no sé exactamente por qué trabajar ...
la documentación en bluetooth básico es bastante escaso así que si alguien tiene alguna idea sobre cómo hacer esto, o tiene una mejor manera de hacer lo que estoy tratando de lograr, agradecería la ayuda.
parece estar funcionando ... ¿Con qué frecuencia se actualiza el RSSI? EDITAR: ¿Una vez por minuto?Creo que hay un tiempo de espera cuando no se conecta, por lo que comienza el escaneo otra vez. – chwi
Acabo de comenzar a leer la documentación yo mismo, por lo que está más adelante que yo. Pregunta, ¿por qué llama a scanForPeripheralsWithServices en el método de delegado didRetrievePeripherals? Ya lo llamas después de asignar CBCentralManager. Esto puede estar causando el escaneo repetitivo que mencionaste. – mkr707
solo mis dos centavos para> = 7.0: retrievePeripheralsWithIdentifiers necesita usarse a partir de ahora. –