Weiß jemand, wie man einen BLE Service von UUID in Android entdecken? Es gibt eine discoverServices() method in Android, aber es scheint keine Möglichkeit zu geben, einen einzelnen Service zu finden, anstatt alle. In Bluetooth dauert die Erkennung aller Dienste sehr lange, während die Erkennung einzelner Dienste auf UUID-Basis nicht so lange dauert. Es dauert noch länger für Android, weil Android auch alle Merkmale und Deskriptoren entdeckt.Entdecken Sie spezifische Bluetooth Low Energy Service von UUID in Android
Antwort
TL; DR: kann man nicht - wenn man nicht wirklich hässliche und potentiell gefährliche Hacks machen will.
Es gibt keine einfache Möglichkeit, dies zu tun. Wenn Sie sich ansehen, was discoverServices()
auf Nougat macht, werden Sie es als GattService:L1454 aufrufen.
void discoverServices(int clientIf, String address) {
enforceCallingOrSelfPermission(BLUETOOTH_PERM, "Need BLUETOOTH permission");
Integer connId = mClientMap.connIdByAddress(clientIf, address);
if (DBG) Log.d(TAG, "discoverServices() - address=" + address + ", connId=" + connId);
if (connId != null)
gattClientSearchServiceNative(connId, true, 0, 0);
else
Log.e(TAG, "discoverServices() - No connection for " + address + "...");
}
Der Schlüssel hier ist gattClientSearchServiceNative:
gattClientSearchServiceNative(int conn_id,
boolean search_all,
long service_uuid_lsb,
long service_uuid_msb)
Wenn search_all
wahr ist, wird es alles scannen. Wenn nicht, wird nur ein Dienst mit der bereitgestellten UUID und ihren Eigenschaften und Deskriptoren durchsucht.
könnten Sie tatsächlich versuchen und Reflektion verwenden diese direkt einen falsch search_all Parameter und eine gültige UUID vorbei zu nennen, aber das ist eine wirklich schlechte Praxis und Absturz am Ende, wenn eine neue Version und die interne Umsetzung dieser kommt Klassenänderungen.
- 1. Bluetooth Low Energy Android Studio
- 2. Android Studio: Bluetooth Low Energy BLE Werbung
- 3. Bluetooth Low Energy Notification Intervall
- 4. Android Bluetooth Low Energy Geräte nicht finden
- 5. Bluetooth Low Energy Sensor-Simulator
- 6. Bluetooth low energy - Ein-/Ausgabefehler
- 7. IOS Bluetooth Low Energy Verbindungsintervall
- 8. Android: Bluetooth Low Energy Scanner empfängt Null-Daten
- 9. Authentifizierungsproblem in BLE Bluetooth Low Energy-Gerät
- 10. Mit Bluetooth Low-Energy in Linux-Befehlszeile
- 11. Android Bluetooth Low Energie Service
- 12. Random Adresse Einstellung in Bluetooth Low Energy
- 13. Bluetooth Low Energy Beacons Entfernung mit Python
- 14. Bluetooth Low Energy APIs in Java
- 15. Android BLE Service Discovery (Bluetooth Gatt # discoverServices()) und Low Energy vs BR/EDR
- 16. Init-Verbindung ohne Synchronisierung mit Bluetooth Low Energy in Android
- 17. Bluetooth Low Energy: RFDuino wird nicht erkannt
- 18. Unterschied zwischen iOS und Android Bluetooth Low Energy Verbindung
- 19. Bluetooth Low Energy unter Windows 7?
- 20. Bluetooth Low Energy - Verbindung mit demselben Gerät
- 21. Qt - WINDOWS - Bluetooth Low Energy funktioniert?
- 22. Chrome Bluetooth Low Energy API - Plattformübergreifende Unterstützung
- 23. So senden Sie Bluetooth Low Energy GATT Benachrichtigung mit Bluez?
- 24. Bluetooth Low Energy Verbindungsparameter für Android, iOS und Win8
- 25. Erläuterung der PDU-Größe in Bluetooth Low Energy 4.2
- 26. Android Senden von Daten über Blue Tooth Low Energy Adapter
- 27. Interpretieren iOS-Code, um Bluetooth Low Energy Daten auf Android zu bekommen
- 28. Daten empfangen von Bluetooth Low Energy Gerät in Android ist sehr langsam
- 29. Bluetooth Low Energy (BLE) - Beschränken Sie die Werbeentfernung für alle Android-Geräte
- 30. Bluetooth GATT UUID
ist die service_uuid_lsb und service_uuid_msb die lsb und msb für die gesamte 128-Bit-UUID? Irgendeine Idee, warum Google keine API zur Verfügung stellen würde, um dies zu tun? Oder auch nur eine API, um die Services und nicht alle Merkmale und Deskriptoren zu entdecken? –
Ja, sie sind das MSB und LSB der 128bit UUID. Warum würde es das nicht bieten? Meine Vermutung wäre, dass der "langsame" Teil der BLE-Dienste eines Geräts nicht die Servicedaten erhält, sondern sich mit dem Gerät verbindet und die Daten anfordert. Es wäre also schneller, nach allem zu fragen, anstatt nach Service A zu fragen, den Scan zu beenden, dann nach Service B, den Scan zu beenden ... Sie könnten sich wahrscheinlich in AOSPs Google-Gruppe danach erkundigen. –
Danke für die Information. In meinem Fall gibt es nur einen Dienst (von vielen), den ich entdecken möchte, und dann einen (von vielen) für die überwiegende Mehrheit meiner Anwendungsfälle. Allgemeine BLE-Best Practice ist die Verbindung und nur entdecken, was Sie brauchen, und dann wieder trennen. Ich werde definitiv auch auf AOSP fragen, danke! –