2017-02-24 2 views
0

Ich möchte Beacons von 2 BLE-Geräten empfangen. Ich kenne ihre Bluetooth-Adressen.Warum bekomme ich nur einen Beacon, wenn mehrere BLE-Filter verwendet werden?

private List<ScanFilter> filters = new ArrayList<ScanFilter>(); // Global in actual code 

ScanFilter filter1 = new ScanFilter.Builder() 
    .setDeviceAddress(bluetoothAddress1).build(); 

filters.add(filter1); 

ScanFilter filter1 = new ScanFilter.Builder() 
    .setDeviceAddress(bluetoothAddress1).build(); 

filters.add(filter2); 

und nennen Sie es mit

mLEScanner.startScan(filters, settings, mScanCallback); 

(Einstellungen und Rückruf wurde definiert an anderer Stelle und korrekt funktionieren): Ich habe eine Filterliste wie so erstellt.

Wenn ich die Filterliste drucke, kann ich meine beiden Filter sehen, also weiß ich, dass sie da sind. Wenn ich einen der Filter auskommentiere, werde ich nur Pakete von dem anderen Beacon korrekt empfangen (das ist egal, welchen Filter ich auskommentiere). Wenn ich jedoch beide Filter unkommentiert lasse, dann empfange ich immer nur Pakete vom zweiten Gerät.

Warum gibt mir das Scannen mit Filtern immer nur Pakete von einem Gerät, nicht von mehreren?

Antwort

0

Wenn Sie mehrere Scanfilter hinzufügen, werden sie als UND-Bedingung und nicht als ODER-Bedingung angewendet. Dies bedeutet, dass ALLE Scan-Filter gleichzeitig erfüllt sein müssen, um eine Übereinstimmung zu erzeugen. Da jedes Bluetooth-Gerät eine eindeutige MAC-Adresse hat, kann nur ein Filter gleichzeitig übereinstimmen.

Wenn beide angewendet würden, würden Sie nie irgendwelche Ergebnisse erhalten. Ich sehe zwar keine Dokumentation, um dies zu bestätigen, aber ich vermute, dass der Geräteadressfilter aus diesem Grund ein Sonderfall ist, und nur einer kann gleichzeitig aktiv sein, wobei der zuletzt angewandte aktiv ist.

Verwandte Themen