Nie rozumiem, co oznacza identyfikator UUID Bluetooth. Czy identyfikatory UUID oznaczają protokoły (np. RFCOMM )? Jeśli tak, dlaczego te createRfcommSocketToServiceRecord()
metody wymagają identyfikatorów UUID, skoro określają rfcomm bezpośrednio w swoich nazwach? Dlaczego przykładowy kod BluetoothChat ma pozornie dowolny, zakodowany na stałe identyfikator UUID?
Moje pytanie pojawia się, ponieważ zgodnie z tym pytaniem otrzymuję wyjątek wskaźnika zerowego, gdy urządzenia z systemem 4.0.4 próbują połączyć się (z zewnętrznym urządzeniem innym niż Android) za pomocą odbicia. Jednak rozwiązanie tego pytania nie działa dla mnie. UUID muuid = device.getUuids()[0].getUuid();
podnosi wyjątek.
Edycja : rozwiązałem ten problem, zakodowując na stałe identyfikator UUID dla usługi portu szeregowego zgodnie z tą odpowiedzią (używając UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");
).
Ponadto zastanawiam się, dlaczego muszę podać identyfikator UUID, aby utworzyć niezabezpieczone gniazdo rfcomm, używając, createInsecureRfcommSocketToServiceRecord(),
ale nie używając metody odbicia.
Czy ktoś może mnie wyprostować?
Odpowiedzi:
W Bluetooth wszystkie obiekty są identyfikowane za pomocą identyfikatorów UUID. Obejmują one usługi, cechy i wiele innych rzeczy. Bluetooth utrzymuje bazę danych z przypisanymi numerami dla standardowych obiektów i przypisuje podzakresy dla dostawców (którzy zapłacili wystarczająco dużo za rezerwację). Możesz wyświetlić tę listę tutaj:
https://www.bluetooth.com/specifications/assigned-numbers/
Jeśli wdrażasz standardową usługę (np. Port szeregowy, klawiatura, zestaw słuchawkowy, itp.), Powinieneś użyć standardowego UUID tej usługi - pozwoli ci to na współpracę z urządzeniami, których nie stworzyłeś.
Jeśli wdrażasz usługę niestandardową, powinieneś wygenerować unikalne identyfikatory UUID, aby mieć pewność, że niekompatybilne urządzenia innych firm nie będą próbowały korzystać z Twojej usługi, myśląc, że jest to coś innego. Najłatwiej jest wygenerować losowe, a następnie zakodować wynik w swojej aplikacji (i oczywiście użyć tych samych identyfikatorów UUID w urządzeniach, które będą łączyć się z Twoją usługą).
źródło
Identyfikator UUID służy do jednoznacznej identyfikacji informacji. Identyfikuje określoną usługę świadczoną przez urządzenie Bluetooth. Norma definiuje podstawowy
BASE_UUID: 00000000-0000-1000-8000-00805F9B34FB
.Urządzenia, takie jak czujniki medyczne, mogą świadczyć usługi, zastępując pierwsze osiem cyfr predefiniowanym kodem. Na przykład urządzenie, które oferuje połączenie RFCOMM, używa krótkiego kodu: 0x0003
Tak więc telefon z Androidem może połączyć się z urządzeniem, a następnie użyć protokołu wykrywania usług (SDP), aby dowiedzieć się, jakie usługi zapewnia (UUID).
W wielu przypadkach nie musisz używać tych stałych identyfikatorów UUID. W przypadku, gdy tworzysz aplikację do czatu, na przykład jeden telefon z systemem Android współdziała z innym telefonem z systemem Android, który korzysta z tej samej aplikacji, a zatem z tego samego UUID.
Możesz więc ustawić dowolny UUID dla swojej aplikacji, używając na przykład jednego z wielu generatorów losowych UUID w Internecie ( na przykład ).
źródło
Zwykle reprezentuje jakąś powszechną usługę (protokół) obsługiwaną przez urządzenie Bluetooth.
Tworząc własny serwer rfcomm (z
listenUsingRfcommWithServiceRecord
), powinieneś określić swój własny UUID, aby klienci, którzy się z nim łączą, mogli go zidentyfikować; jest to jeden z powodów, dla którychcreateRfcommSocketToServiceRecord
wymaga parametru UUID.W przeciwnym razie niektóre popularne usługi mają ten sam identyfikator UUID, po prostu znajdź taki, którego potrzebujesz i użyj go.
Zobacz tutaj
źródło
UUID
to uniwersalny identyfikator. RFCOMM jest tylko warstwą stosu protokołów Bluetooth i ma powiązany UUID zgodnie ze specyfikacją Bluetooth; i jest używany przez SDP, nie do końca wiadomo, do czego; ale zawsze możesz o tym przeczytać w specyfikacji. Teraz, jeśli tworzysz usługę na podstawie protokołu RFCOMM, musisz podać UUID, ponieważ jest on wymagany przez SDP, w przeciwnym razie Twoja usługa nie zostanie wykryta.Identyfikator UUID jest podobny w pojęciu do numerów portów w Internecie. Jednak różnica między technologią Bluetooth a Internetem polega na tym, że w przypadku technologii Bluetooth numery portów są przypisywane dynamicznie przez serwer SDP (protokół wykrywania usług) podczas działania, w którym każdemu identyfikatorowi UUID nadawany jest numer portu. Inne urządzenia zapytają serwer SDP, który jest zarejestrowany pod zarezerwowanym numerem portu, o dostępne usługi na urządzeniu i odpowiedzą za pomocą różnych usług, które można odróżnić od siebie, rejestrując się pod różnymi identyfikatorami UUID.
źródło
UUID to tylko liczba. Nie ma to żadnego znaczenia, z wyjątkiem tworzenia po stronie serwera aplikacji na Androida. Następnie klient łączy się przy użyciu tego samego UUID.
Na przykład po stronie serwera możesz najpierw uruchomić uuid = UUID.randomUUID (), aby wygenerować liczbę losową, taką jak fb36491d-7c21-40ef-9f67-a63237b5bbea. Następnie zapisz to, a następnie na stałe zakoduj w swoim programie nasłuchującym w następujący sposób:
UUID uuid = UUID.fromString("fb36491d-7c21-40ef-9f67-a63237b5bbea");
Twój program serwera Android będzie nasłuchiwał żądań przychodzących z tym UUID w następujący sposób:
BluetoothServerSocket server = mBluetoothAdapter.listenUsingRfcommWithServiceRecord("anyName", uuid);
Gniazdo BluetoothSocket = server.accept ();
źródło
Podsumowując:
UUid
służy do jednoznacznej identyfikacji aplikacji. Każda aplikacja ma unikalnyUUid
Więc używaj tego samego
UUid
dla każdego urządzeniaźródło
UUID to skrót od Universally Unique Identifier. UUID to prosta 128-bitowa cyfra, która jest wyjątkowo rozpowszechniona na całym świecie.
Bluetooth wysyła dane bezprzewodowo i wszystkie pobliskie urządzenia mogą je odbierać. Załóżmy, że czasami trzeba wysłać ważne pliki przez Bluetooth, a wszystkie znajdujące się w pobliżu urządzenia mają do nich dostęp. Dlatego po sparowaniu z innymi urządzeniami po prostu udostępniają one numer UUID i dopasowują się przed udostępnieniem plików. Gdy wysyłasz dowolny plik, Twoje urządzenie zaszyfruje ten plik za pomocą odpowiedniego identyfikatora UUID urządzenia i udostępni w sieci. Teraz wszystkie urządzenia Bluetooth w zasięgu mogą uzyskać dostęp do zaszyfrowanego pliku, ale wymagały prawidłowego numeru UUID. Tak więc tylko właściwe urządzenia UUID mają dostęp do zaszyfrowania pliku, a inni odrzucą przyczynę nieprawidłowego UUID.
Krótko mówiąc, możesz użyć UUID jako tajnego hasła do udostępniania plików między dwoma dowolnymi urządzeniami Bluetooth.
źródło