2016-08-05 47 views
1

Ich arbeite derzeit an einer Android-App, die mit einem Arduino-Mikroprozessor mit Bluetooth SPP-Funktionen verbindet. Meine App zeigt alle zuvor gekoppelten Bluetooth-Geräte an, aber ich wollte wissen, ob es möglich ist, nur gekoppelte Geräte anzuzeigen, die gerade eingeschaltet sind. Ich habe überall nach einer Antwort gesucht und muss noch eine finden, hoffentlich ist das möglich.Ist es möglich, nur eine aktive Liste von Bluetooth-Geräten anzuzeigen, die gepaart sind, sich in Reichweite befinden und nicht alle zuvor gepaarten Geräte anzeigen?

Antwort

0

Sie müssen ein BluetoothAdapter, erstellen und ein BroadcastReceiver zu BluetoothDevice.ACTION_FOUND. registrieren Speichern Sie diese gefundenen Geräte in einer Liste.

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
IntentFilter intentFilter = new IntentFilter(); 
intentFilter.addAction(BluetoothDevice.ACTION_FOUND); 
registerReceiver(receiver, intentFilter); 
bluetoothAdapter.startDiscovery(); 

... 
private ArrayList<BluetoothDevice> devices = new ArrayList<>(); 
private final BroadcastReceiver receiver = new BroadcastReceiver(){ 
    public void onReceive(Context context, Intent intent){ 
     String action = intent.getAction(); 
     if(action.equals(BluetoothAdapter.ACTION_FOUND)){ 
      BluetoothDevice bluetoothDevice = (BluetoothDevice) intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
      devices.add(bluetoothDevice); 
     } 
    } 
}; 

Sie können auch den Empfänger zu BluetoothDevice.ACTION_DISCOVERY_STARTED und BluetoothDevice.ACTION_DISCOVERY_FINISHED registrieren und sie entsprechend behandeln.

Hinweis: Vergessen Sie nicht, den Broadcast-Empfänger im Manifest zu registrieren und die erforderlichen Berechtigungen einzubeziehen.

+0

so, was ich zur Zeit habe, ist ein bluetooth.getBondedDevices(); Objekt, das ich dann zu einem Array-Adapter innerhalb einer for-Schleife hinzufüge. Ist es möglich, BroadcastReceiver innerhalb dieser Schleife zu implementieren, so dass es die Geräte, die eingeschaltet sind, aussortieren kann? Aus Ihrem Code sieht es so aus, als würde es Geräte hinzufügen, die versucht werden entdeckt zu werden, aber keine, die bereits gepaart sind. Korrigiere mich, wenn ich falsch liege. Und dieser Code befindet sich in einer DeviceList.java getrennt von der Hauptaktivität. – timedwalnut

+0

Sie könnten das Array einfach mit 'getBondedDevices()' initialisieren und dann weitere Geräte über den 'BroadcastReceiver' hinzufügen. Um sicherzustellen, dass doppelte Geräte nicht hinzugefügt werden, prüfen Sie zunächst, ob das 'ArrayAdapter' bereits ein' BluetoothDevice' mit der gleichen Adresse enthält . – Nerdizzle

+0

Beim Implementieren von onReceive() in BroadcastReceive() gibt es immer noch einen Fehler, der besagt, dass BroadcastReciever() onReceive() implementieren muss. Irgendwelche Gedanken? Und funktioniert das am besten in onCreate(), wenn die Liste initialisiert wird? – timedwalnut