Android, wie mehrere BLE-Merkmale mit einer PriorityQueue gelesen werden

8

Ein bisschen hier stecken, könnte Ihre Hilfe brauchen. Ich möchte mehrere BLE-Eigenschaften gleichzeitig lesen, einige Leute schlagen vor, PriorityQueue dafür zu verwenden. Ich kenne bereits alle Uuids, etc. brauchen nur eine Möglichkeit, mehrere gleichzeitig zu lesen. Kann mir jemand erklären, wie genau das aussehen soll? Oder vielleicht gibt es noch eine andere einfachere Lösung?

Vielen Dank im Voraus, hier ist mein Code:

%Vor%

UPDATE:

auch nach dem Einfügen in verschiedene Threads reagiert es immer noch nur auf eine gatt.readCharacteristic (...). wie folgt:

%Vor%     
Robert K. 17.11.2015, 07:14
quelle

2 Antworten

10

Für jeden, der auf dasselbe Problem stoßen könnte, ist hier eine einfache Lösung, die eine List & lt; & gt; von Eigenschaften.

%Vor%
  1. Erstellen Sie eine Liste mit Merkmalen
  2. In onServicesDiscovered füllen Sie die Liste mit Merkmalen, die Sie lesen / schreiben möchten
  3. Erstellen Sie eine neue Methode namens requestCharacteristics (gatt) und übergeben Sie das gatt-Objekt an sie. Rufen Sie diese Methode von onServicesDiscovered auf, nachdem Sie der Liste Merkmale hinzugefügt haben.
  4. In der Methode requestCharacteristics () rufen Sie gatt.readCharacteristic (chars.get (chars.size () - 1));
  5. auf
  6. Überprüfen Sie in onCharacteristicRead, ob die Größe Ihrer Liste nicht Null ist, lesen Sie dann Ihr Merkmal, entfernen Sie das letzte Element Ihrer Liste und rufen Sie requestCharacteristic () erneut auf.
  7. Das ist alles
Robert K. 24.11.2015, 09:54
quelle
1

Vielen Dank für Ihren Post, Robert K. Ich wollte, dass meine App alle charakteristischen Werte selbst liest und den charakteristischen Wert in der ExpandableList anstelle der UUID anzeigt. Robert Ks Code funktionierte für mich, aber ich habe einen Offset der angezeigten Werte erfahren. Also habe ich ein paar kleine Änderungen vorgenommen und möchte sie teilen: 1.

  1. So habe ich onServicesDiscovered und OnCharacteristicRead geändert:

    %Vor%
  2. Die eingeblendete Merkmalliste wird nach jeder Trennung geleert.

  3. Ich habe eine Liste zum Speichern der Merkmalswerte und eine ganze Zahl eingeführt, die anzeigt, um welchen Index es sich handelt (diese müssen nach jeder Trennung geleert / auf Null gesetzt werden). Ich habe die Methode displayData geändert, die nach jedem characteristicRead aufgerufen wird:

öffentlich

%Vor%
  1. Ich möchte, dass die charakteristischen Werte in der ExpandableList angezeigt werden, sobald Dienste erkannt werden. Die Methode displayGattServices füllt die ExpandableList mit den Namen und UUIDs der Dienste und Merkmale.

Anstatt die UUID zu füllen, fülle ich das entsprechende Element von mCharValues ​​

%Vor%
  1. Schließlich habe ich den Inhalt von ExpandableListView.OnChildClickListener auskommentiert. Abgesehen von dem, was ich hier vorgestellt habe, habe ich den Rest des Codes ziemlich gleich gelassen.
Roia 22.03.2018 08:44
quelle