2016-03-29 3 views
2

Ich implementiere eine einfache Werbung + Scan-Funktionalität mit BLE auf Android, und aus irgendeinem Grund bekomme ich viele Anrufe an die onScanResult Rückruf über das gleiche Gerät.Scannen mit BluetoothLeScanner Anrufe onScanResult mehrere Male für das gleiche Gerät

Für Werbung:

//Advertise settings build 
AdvertiseSettings.Builder builder = new AdvertiseSettings.Builder(); 
builder.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_LATENCY); 
builder.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH); 
builder.setConnectable(true); 

AdvertiseSettings advSettings = builder.build(); 

//Advertise data build 
AdvertiseData.Builder advDataBuilder = new AdvertiseData.Builder(); 
advDataBuilder.addServiceUuid(ParcelUuid.fromString(SFGattAttributes.SERVICE)); 

AdvertiseData advertiseData = advDataBuilder.build(); 

//Start Advertising 
bluetoothLeAdvertiser.startAdvertising(advSettings, advertiseData, advertiseData, new BLEAdvertiserCallback()); 

Beim Scannen:

BluetoothManager bluetoothManager = (BluetoothManager) context.getSystemService(Context.BLUETOOTH_SERVICE); 
bluetoothAdapter = bluetoothManager.getAdapter(); 
bluetoothLeScanner = bluetoothAdapter.getBluetoothLeScanner(); 
bluetoothLeScanner.startScan(getScanFilters(), getScanSettings(), new BLEScanCallback()); 

Der einzige Unterschied scheint jedes Mal, wenn ein Unterschied in dem RSSI-Wert zu sein.

Gibt es eine Möglichkeit, diese Mehrfachanrufe zu vermeiden?

+0

Zum Anzeigen Zweck, ich denke, Sie müssen überprüfen, ob das gleiche Gerät zuvor abgeholt wurde oder nicht. Ich bin auch auf dasselbe Problem gestoßen. –

Antwort

3

Dies ist eigentlich eine Funktion und kann für die Verwendung einer (Werbung) BLE-Gerät verwendet werden. Es gibt auch (ältere) Geräte, die während eines Scan-Zyklus nicht mehrere Scan-Ergebnisse für ein bestimmtes Gerät erhalten. Dies führt dann zu Problemen bei der Auswahl anderer Geräte einschließlich BLE-Beacons. Die Mehrfachanrufe zeigen Ihnen auch (nach einiger Zeit), dass das Gerät noch erreichbar ist.

Also wenn Sie nicht möchten, dass die mehreren Anrufe ignorieren Sie einfach die Anrufe für bekannte Geräte (MAC-Adressen). Es kann nicht deaktiviert werden.

Denken Sie daran, dass viele Geräte (insbesondere Telefone) ihre MAC-Adresse ändern. Einige sogar alle 2 Minuten. Es ist nicht einfach, die neue MAC-Adresse dem alten Gerät (alte MAC-Adresse) zuzuordnen. Sie müssen das Verhalten entsprechend behandeln.

Verwandte Themen