Android: Wie funktionieren Bluetooth UUIDs?



1 Answers

Die UUID wird zur eindeutigen Identifizierung von Informationen verwendet. Er identifiziert einen bestimmten Dienst, der von einem Bluetooth-Gerät bereitgestellt wird. Der Standard definiert eine grundlegende BASE_UUID: 00000000-0000-1000-8000-00805F9B34FB .

Geräte wie Healthcare-Sensoren können einen Service bereitstellen und die ersten acht Ziffern durch einen vordefinierten Code ersetzen. Beispiel: Ein Gerät, das eine RFCOMM-Verbindung anbietet, verwendet den Funktionscode here

So kann ein Android-Telefon eine Verbindung zu einem Gerät herstellen und dann mithilfe des Service Discovery Protocol (SDP) herausfinden, welche Dienste es bereitstellt (UUID).

In vielen Fällen müssen Sie diese festen UUIDs nicht verwenden. Wenn Sie beispielsweise eine Chat-Anwendung erstellen, interagiert ein Android-Telefon mit einem anderen Android-Telefon, das die gleiche Anwendung und daher die gleiche UUID verwendet.

Sie können also eine beliebige UUID für Ihre Anwendung festlegen, indem Sie z. B. einen der vielen zufälligen UUID-Generatoren im Web verwenden.

Question

Ich verstehe nicht, was eine Bluetooth UUID bedeutet. Bezeichnen UUIDs Protokolle (zB RFCOMM )? Wenn ja, warum benötigen die Methoden createRfcommSocketToServiceRecord() UUIDs, wenn sie rfcomm in ihren Namen angeben? Warum hat der BluetoothChat-Beispielcode eine scheinbar willkürliche, fest codierte UUID?

Meine Frage tritt auf, weil ich nach dieser Frage eine Null-Zeiger-Ausnahme bekomme, wenn Geräte, die 4.0.4 ausführen, versuchen, eine Verbindung herzustellen (zu einem externen, nicht-Android-Gerät), indem sie Reflektion verwenden. Die Lösung für diese Frage funktioniert jedoch nicht für mich. UUID muuid = device.getUuids()[0].getUuid(); löst eine Ausnahme aus.

Edit : Ich habe dieses Problem gelöst, indem ich die UUID für den seriellen Port-Dienst gemäß dieser Antwort fest UUID.fromString("00001101-0000-1000-8000-00805f9b34fb"); mit UUID.fromString("00001101-0000-1000-8000-00805f9b34fb"); ).

Ich bin weiter verwundert darüber, warum ich eine UUID bereitstellen muss, um mit createInsecureRfcommSocketToServiceRecord(), einen ungesicherten rfcomm-Socket zu erstellen createInsecureRfcommSocketToServiceRecord(), aber nicht die Reflection-Methode.

Kann mich jemand aufrichten?




UUID ist nur eine Nummer. Es hat keine Bedeutung außer Sie erstellen auf der Serverseite einer Android App. Dann verbindet sich der Client mit derselben UUID.

Auf der Serverseite können Sie beispielsweise zuerst uuid = UUID.randomUUID () ausführen, um eine Zufallszahl wie fb36491d-7c21-40ef-9f67-a63237b5bbea zu generieren. Dann speichere das und schreibe es dann so in dein Listener-Programm:

 UUID uuid = UUID.fromString("fb36491d-7c21-40ef-9f67-a63237b5bbea"); 

Ihr Android-Server-Programm wird auf eingehende Anfragen mit dieser UUID wie folgt warten:

    BluetoothServerSocket server = mBluetoothAdapter.listenUsingRfcommWithServiceRecord("anyName", uuid);

Bluetooth Socket-Socket = server.accept ();






Related