Ich verstehe nicht, was eine Bluetooth-UUID bedeutet. Bezeichnen UUIDs Protokolle (z. B. RFCOMM )? Wenn ja, warum erfordern die createRfcommSocketToServiceRecord()
Methoden UUIDs, wenn sie rfcomm direkt in ihren Namen angeben? Warum hat der BluetoothChat-Beispielcode eine scheinbar willkürliche, fest codierte UUID?
Meine Frage stellt sich, weil gemäß dieser Frage eine Nullzeigerausnahme angezeigt wird, wenn Geräte mit 4.0.4 versuchen, mithilfe von Reflection eine Verbindung (zu einem externen Gerät ohne Android) herzustellen. Die Lösung dieser Frage funktioniert bei mir jedoch nicht. UUID muuid = device.getUuids()[0].getUuid();
löst eine Ausnahme aus.
Bearbeiten : Ich habe dieses Problem gelöst, indem ich die UUID für den seriellen Portdienst gemäß dieser Antwort (mit UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");
) fest codiert habe .
Ich bin weiter verwirrt darüber, warum ich eine UUID angeben muss, um einen ungesicherten RFCOM-Socket createInsecureRfcommSocketToServiceRecord(),
mit der Reflektionsmethode zu erstellen, aber nicht.
Kann mich jemand begradigen?
Antworten:
In Bluetooth werden alle Objekte durch UUIDs identifiziert. Dazu gehören Dienstleistungen, Eigenschaften und viele andere Dinge. Bluetooth verwaltet eine Datenbank mit zugewiesenen Nummern für Standardobjekte und weist Unterbereiche für Anbieter zu (die für eine Reservierung genug bezahlt haben). Sie können diese Liste hier anzeigen:
https://www.bluetooth.com/specifications/assigned-numbers/
Wenn Sie einen Standarddienst implementieren (z. B. eine serielle Schnittstelle, eine Tastatur, ein Headset usw.), sollten Sie die Standard-UUID dieses Dienstes verwenden. Auf diese Weise können Sie mit Geräten zusammenarbeiten, die Sie nicht entwickelt haben.
Wenn Sie einen benutzerdefinierten Dienst implementieren, sollten Sie eindeutige UUIDs generieren, um sicherzustellen, dass inkompatible Geräte von Drittanbietern nicht versuchen, Ihren Dienst zu verwenden, da dies etwas anderes ist. Am einfachsten ist es, zufällige zu generieren und das Ergebnis in Ihrer Anwendung fest zu codieren (und natürlich dieselben UUIDs in den Geräten zu verwenden, die eine Verbindung zu Ihrem Dienst herstellen).
quelle
Die UUID wird zur eindeutigen Identifizierung von Informationen verwendet. Es identifiziert einen bestimmten Dienst, der von einem Bluetooth-Gerät bereitgestellt wird. Der Standard definiert eine Basis
BASE_UUID: 00000000-0000-1000-8000-00805F9B34FB
.Geräte wie Gesundheitssensoren können einen Dienst bereitstellen und die ersten acht Ziffern durch einen vordefinierten Code ersetzen. Ein Gerät, das eine RFCOMM-Verbindung anbietet, verwendet beispielsweise den Funktionscode 0x0003
Ein Android-Telefon kann also 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 dieselbe Anwendung und damit dieselbe UUID verwendet.
So können Sie eine beliebige UUID für Ihre Anwendung festlegen, indem Sie beispielsweise einen der vielen zufälligen UUID-Generatoren im Web verwenden ( zum Beispiel ).
quelle
Es handelt sich normalerweise um einen allgemeinen Dienst (Protokoll), den ein Bluetooth-Gerät unterstützt.
Wenn Sie Ihren eigenen rfcomm-Server (mit
listenUsingRfcommWithServiceRecord
) erstellen , sollten Sie Ihre eigene UUID angeben, damit die damit verbundenen Clients sie identifizieren können. Dies ist einer der Gründe, warumcreateRfcommSocketToServiceRecord
ein UUID-Parameter erforderlich ist.Andernfalls haben einige allgemeine Dienste dieselbe UUID. Suchen Sie einfach eine, die Sie benötigen, und verwenden Sie sie.
Siehe hier
quelle
UUID
ist universelle Kennung. RFCOMM ist nur eine Schicht auf dem Bluetooth-Protokollstapel und verfügt über eine zugeordnete UUID gemäß Bluetooth-Spezifikation. und wird von der SDP verwendet, nicht ganz sicher, wofür; aber Sie können immer darüber in der Spezifikation lesen. Wenn Sie jetzt einen Dienst über dem RFCOMM-Protokoll erstellen, müssen Sie eine UUID angeben, wie sie von SDP benötigt wird, da Ihr Dienst sonst nicht erkannt wird.Die UUID ähnelt in ihrer Vorstellung den Portnummern im Internet. Der Unterschied zwischen Bluetooth und dem Internet besteht jedoch darin, dass in Bluetooth Portnummern zur Laufzeit dynamisch vom SDP-Server (Service Discovery Protocol) zugewiesen werden, wobei jeder UUID eine Portnummer zugewiesen wird. Andere Geräte fragen den SDP-Server, der unter einer reservierten Portnummer registriert ist, nach den verfügbaren Diensten auf dem Gerät und antworten mit unterschiedlichen Diensten, die sich voneinander unterscheiden, indem sie unter verschiedenen UUIDs registriert werden.
quelle
UUID ist nur eine Zahl. Es hat keine Bedeutung, außer dass Sie auf der Serverseite einer Android-App erstellen. Dann stellt der Client eine Verbindung mit derselben UUID her.
Auf der Serverseite können Sie beispielsweise zuerst uuid = UUID.randomUUID () ausführen, um eine Zufallszahl wie fb36491d-7c21-40ef-9f67-a63237b5bbea zu generieren. Speichern Sie das und speichern Sie es dann wie folgt in Ihrem Listener-Programm:
UUID uuid = UUID.fromString("fb36491d-7c21-40ef-9f67-a63237b5bbea");
Ihr Android-Serverprogramm wartet auf eingehende Anfragen mit dieser UUID wie folgt:
BluetoothServerSocket server = mBluetoothAdapter.listenUsingRfcommWithServiceRecord("anyName", uuid);
BluetoothSocket socket = server.accept ();
quelle
Zusammenfassend:
UUid
Wird verwendet, um Anwendungen eindeutig zu identifizieren. Jede Anwendung hat eine eindeutigeUUid
Verwenden Sie also
UUid
für jedes Gerät dasselbequelle
Die UUID steht für Universally Unique Identifier. UUID ist eine einfache 128-Bit-Ziffer, die weltweit eindeutig verteilt ist.
Bluetooth sendet Daten über Funk und alle Geräte in der Nähe können sie empfangen. Nehmen wir an, manchmal müssen Sie einige wichtige Dateien über Bluetooth senden, und alle Geräte in der Nähe können in Reichweite darauf zugreifen. Wenn Sie also mit den anderen Geräten koppeln, teilen diese einfach die UUID-Nummer und stimmen überein, bevor sie die Dateien freigeben. Wenn Sie eine Datei senden, verschlüsselt Ihr Gerät diese Datei mit der entsprechenden Geräte-UUID und gibt sie über das Netzwerk frei. Jetzt können alle Bluetooth-Geräte in der Reichweite auf die Verschlüsselungsdatei zugreifen, benötigen jedoch die richtige UUID-Nummer. Daher haben nur richtige UUID-Geräte Zugriff auf die Verschlüsselung der Datei, und andere lehnen die Ursache einer falschen UUID ab.
Kurz gesagt, Sie können UUID als geheimes Kennwort für die gemeinsame Nutzung von Dateien zwischen zwei beliebigen Bluetooth-Geräten verwenden.
quelle