Ich habe gerade mit dem Kern-Bluetooth-Framework für iOS begonnen und ich entwickle eine App, die ständig nach BLE-Geräten suchen muss, damit ich ihre RSSI-Nummer jede Minute abrufen kann damit.Core Bluetooth - konstante RSSI-Updates von Geräten innerhalb der Reichweite
Zur Zeit habe ich:
manager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:FALSE], CBCentralManagerScanOptionAllowDuplicatesKey, nil];
[manager scanForPeripheralsWithServices:nil options:options];
dies beginnt meine app-Scanning für BLE Geräte und ruft diese Delegatmethode, wenn ein Gerät entdeckt wird:
- (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]];}
diese Methode wird mir die RSSI Anzahl Peripherie die Ich kann anzeigen. Die letzte Zeile ruft dann diese Delegatmethode:
- (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];
}
Dieser Code scheint zu arbeiten und einen Scan etwa alle 1 Minute zu tun, aber ich weiß nicht genau, warum es funktioniert ...
Die Dokumentation Auf Core-Bluetooth ist ziemlich spärlich, wenn jemand eine Idee, wie dies zu tun hat, oder hat eine bessere Möglichkeit zu tun, was ich zu erreichen versuche, wäre ich dankbar für die Hilfe!
scheint zu funktionieren ... Wie oft wird das RSSI aktualisiert? EDIT: Einmal pro Minute?Ich denke, es gibt eine Zeit, wenn Sie nicht verbinden, so dass es den Scan erneut startet. – chwi
Ich habe gerade angefangen, die Dokumentation selbst zu lesen, also sind Sie weiter als ich. Frage, warum rufen Sie scanForPeripheralsWithServices in der Delegate-Methode didRetrievePeripherals auf? Sie rufen es bereits nach der Zuweisung des CBCentralManagers auf. Dies könnte den wiederholten Scan verursachen, den Sie erwähnt haben. – mkr707
nur meine zwei cent für> = 7.0: retrievePeripheralsWithIdentifiers muss von jetzt an verwendet werden. –