0

Ich habe einen Broadcast-Empfänger in Android implementiert, um alle verfügbaren Bluetooth-Signale zu hören. Der Empfänger funktioniert, zeigt aber nur vier Geräte an. Wenn ich manuell nach Geräten im Android-Menü suche, sehe ich plötzlich acht verschiedene Geräte in meiner App.Bluetooth Scan Ergebnisse mit manuellen Scan in Android

Wie kann ich alle verfügbaren Geräte ohne manuellen Scan sehen?

Code:

private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     String action = intent.getAction(); 
     // When discovery finds a device 
     if (BluetoothDevice.ACTION_FOUND.equals(action)) { 

      // Get the BluetoothDevice object from the Intent 
      BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 

      // Add the name and address to an array adapter to show in a ListView 
      int rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI,Short.MIN_VALUE); 
      Log.d("bluetoothSignal", "name: "+ device.getName() + " adress: "+ device.getAddress() + "strength: "+ rssi + " Data: " + intent.getData()); 
      mArrayAdapter.add(device.getName() + "\n" + device.getAddress()); 
     } 

    } 

}; 
+0

Ich benutze den gleichen BroadcastReceiver und es funktioniert für mich, es zeigt alle Geräte im Bereich. Stellen Sie sicher, dass Ihr Gerät nicht gekoppelt ist, während Sie diesen Code ausführen, da dies die Bandbreite verringert. – B1nd0

+0

Ich habe die Idee, dass es etwas mit Bluetooth Low Energy Geräten zu tun hat, die ich mit diesem Receiver nicht automatisch empfangen kann. Ich bin mir sicher, dass ich mit keinem der Geräte, die ich scanne, gepaart bin. – DigiDude

Antwort

0

Beachten Sie, dass in der ‚Android-Menü‘ Scan-Ergebnisse der gekoppelten Geräte zeigen können, sowie gescannte Geräte. Das könnte also für die Duplikate verantwortlich sein. Dieser Fall ist jedoch nicht sehr wahrscheinlich, da gute Bluetooth-Scanergebnisse doppelte Ergebnisse verhindern sollten. In bestimmten Fällen könnten jedoch auch Duplikate zulässig sein.

Was ich vermute, tatsächlich ist, dass die Systemeinstellungen zurückgibt traditionelle Bluetooth-Geräte (mit rfcomm) und Bluetooth LE-Geräte. Das Problem ist, dass die meisten Bluetooth-Geräte-Menüs keine Kennung anzeigen, die angibt, ob ein Gerät ein Traditionsgerät oder ein Bluetooth LE-Gerät ist, sondern nur der Gerätename. Darüber hinaus neigt es bei Verwendung von BluetoothAdapter.startDiscovery() dazu, herkömmliche Bluetooth-Geräte zu bevorzugen und sendet nur gelegentlich Bluetooth LE-Geräte zurück. Nach meiner Erfahrung entdeckt es in 85 Prozent der Fälle Bluetooth LE-Geräte nicht in der Zeit, die für die Durchführung eines Erkennungsprozesses benötigt wird, 13 Sekunden. Ich empfehle, dass Sie sowohl den traditionellen Scan-Mechanismus als auch den Bluetooth LE-Scan-Mechanismus verwenden. Um einen Bluetooth LE-Scan durchzuführen, erhalten Sie einen Verweis auf die BluetoothLeScanner Anruf BluetoothAdapter.getBluetoothLeScanner(). Sobald Sie eine Referenz haben, rufen Sie BluetoothLeScanner.startScan(ScanCallback callback). Der ScanCallback wird mit erkannten Bluetooth LE-Geräten ausgelöst, die Sie zu Ihrem ListView-Adapter hinzufügen können. Probieren Sie dies aus und sehen Sie, ob Sie ähnliche Ergebnisse mit dem Android-Menü erhalten.