Android: Як працюють UUID Bluetooth?


81

Я не розумію, що означає Bluetooth UUID. Чи позначають UUID протоколи (наприклад, RFCOMM )? Якщо так, то чому createRfcommSocketToServiceRecord()методи вимагають UUID, коли вони вказують rfcomm прямо в своїх іменах? Чому зразок коду BluetoothChat має, здавалося б, довільний, жорстко закодований UUID?

Моє запитання виникає, тому що, відповідно до цього питання , я отримую виняток нульового вказівника, коли пристрої, що працюють на версії 4.0.4, намагаються підключитися (до зовнішнього, не андроїд-пристрою) за допомогою відображення. Однак рішення цього питання для мене не працює. UUID muuid = device.getUuids()[0].getUuid();викликає виняток.

Редагувати : Я вирішив цю проблему шляхом жорсткого кодування UUID для служби послідовного порту відповідно до цієї відповіді (з використанням UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");).

Я ще більше спантеличений тим, чому мені потрібно надати UUID для створення незахищеного сокета rfcomm, використовуючи, createInsecureRfcommSocketToServiceRecord(),але не використовуючи метод відображення.

Хтось може мене виправити?


Ніколи не використовував з'єднання Bluetooth, крім навчальних цілей, але те, що я знаю, це UUID - це ідентифікатор пристрою, щось на зразок адреси пристрою, і залишається незмінним для пристрою.
noob

@Creator: що суперечить ця відповідь: stackoverflow.com/a/4963069/1286571
ForeverWintr

3
Ну, це все, що я знав про UUID Bluetooth, ви можете спробувати прочитати цей PDF для кращого розуміння протоколів Bluetooth та UUID - people.csail.mit.edu/rudolph/Teaching/Articles/PartOfBTBook.pdf
noob

Запитання: Чи має це наслідки, коли телефон Android не підтримує UUID з віддаленого пристрою. (UUID не вказано в Android ... getUuids ())?
Оррі

гей, гей, гей! я хочу щось запитати, @ForeverWintr, чи добре, якщо я визначаю один UUID зі своїм власним форматом і використовується у двох пристроях Android? Я маю на увазі, чи могли вони спілкуватися одне з одним?
gumuruh

Відповіді:


7

У Bluetooth усі об'єкти ідентифікуються за допомогою UUID. Сюди входять послуги, характеристики та багато іншого. Bluetooth підтримує базу даних присвоєних номерів для стандартних об'єктів і призначає піддіапазони для постачальників (які заплатили достатньо за бронювання). Ви можете переглянути цей список тут:

https://www.bluetooth.com/specifications/assigned-numbers/

Якщо ви впроваджуєте стандартну послугу (наприклад, послідовний порт, клавіатуру, гарнітуру тощо), вам слід використовувати стандартний UUID цієї послуги - це дозволить вам бути сумісним із пристроями, які ви не розробляли.

Якщо ви впроваджуєте спеціальну службу, то вам слід створити унікальні UUID, щоб переконатися, що несумісні сторонні пристрої не намагаються використовувати вашу службу, вважаючи, що це щось інше. Найпростіший спосіб - генерувати випадкові, а потім жорстко кодувати результат у вашому додатку (і, звичайно, використовувати ті самі UUID-і в пристроях, які підключатимуться до вашої служби).


Де я можу взяти ці UUID і чому вони завжди є рядками, які здаються випадковими?
лук-хрест

UUID генеруються відповідно до RFC 4122. На вибір є п’ять різних версій UUID. Найпопулярнішими є версія 1 (на основі мітки часу та MAC-адреси) та версія 4 (випадкова). Див. Також en.wikipedia.org/wiki/Universally_unique_identifier . Веб-сторінка, яка може генерувати для вас UUID, - це uuidgenerator.net . Якщо ви член Bluetooth SIG, тоді вони надають алгоритм генерації UUID, прив'язаних до вашого ідентифікатора членства.
Девід К.

29

UUID використовується для однозначної ідентифікації інформації. Він визначає конкретну послугу, що надається пристроєм Bluetooth. Стандарт визначає базовий BASE_UUID: 00000000-0000-1000-8000-00805F9B34FB.

Такі пристрої, як датчики охорони здоров’я, можуть надавати послугу, замінюючи перші вісім цифр заздалегідь визначеним кодом. Наприклад, пристрій, який пропонує з'єднання RFCOMM, використовує короткий код: 0x0003

Отже, телефон Android може підключитися до пристрою, а потім використовувати протокол виявлення послуг (SDP), щоб з’ясувати, які послуги він надає (UUID).

У багатьох випадках вам не потрібно використовувати ці фіксовані UUID. Якщо ви створюєте додаток для чату, наприклад, один телефон Android взаємодіє з іншим телефоном Android, який використовує ту саму програму і, отже, той самий UUID.

Отже, ви можете встановити довільний UUID для своєї програми, використовуючи, наприклад, один із багатьох генераторів випадкових UUID в Інтернеті ( наприклад ).


Отже, повний UUID для послуги RFCOMM: 00000003-0000-1000-8000-00805F9B34FB?
gyozo kudor

1
Примітка: вони містять коротку форму ідентифікатора послуги, яка становить 32 біти. Ви поєднуєте його з базовим UUID 00000000-0000-1000-8000-00805F9B34FB BT SIG, замінюючи перші 4 цифри GUID. Напр. RFCOMM дорівнює 0x0003, тому UUID для послуги RFCOMM становить 00030000-0000-1000-8000-00805F9B34FB
sam msft

22

Зазвичай він представляє якусь загальну послугу (протокол), яку підтримує пристрій Bluetooth.

Створюючи власний сервер rfcomm (with listenUsingRfcommWithServiceRecord), слід вказати власний UUID, щоб клієнти, що підключаються до нього, могли його ідентифікувати; це одна з причин, чому createRfcommSocketToServiceRecordпотрібен параметр UUID.

В іншому випадку деякі загальні служби мають однаковий UUID, просто знайдіть потрібний і скористайтеся ним.

Дивіться тут


3
це зазвичай робить? Коли це не так? Я не розумію, чому, коли я створюю сервер RCOMM, я б не використовував RFCOMM UUID.
ForeverWintr

1
Ну, UUIDце універсальний ідентифікатор. RFCOMM - це лише рівень у стеку протоколів Bluetooth і має відповідний UUID відповідно до специфікації Bluetooth; і використовується СДП, не до кінця впевнений, для чого; але ви завжди можете прочитати про це в специфікації. Тепер, якщо ви створюєте службу поверх протоколу RFCOMM, вам доведеться надати UUID, як це вимагає SDP, інакше ваша служба не буде виявлена.
нульпотентний

3
Знайшов цей в Інтернеті. Всі ?? UUID для BT. sviluppomobile.blogspot.de/2012/11/…
Оррі

Посилання мертве - це був список поширених UUID?
user1725145

7

UUID подібний за своїм поняттям до номерів портів в Інтернеті. Однак різниця між Bluetooth та Інтернетом полягає в тому, що в Bluetooth номери портів динамічно призначаються сервером SDP (протокол виявлення послуг) під час роботи, де кожному UUID надається номер порту. Інші пристрої запитають сервер SDP, який зареєстрований під зарезервованим номером порту, про доступні послуги на пристрої, і він відповість різними послугами, які можна відрізнити один від одного, зареєструвавшись під різними UUID.


4

UUID - це просто число. Це не має значення, крім як ви створюєте на стороні сервера програми для Android. Потім клієнт підключається, використовуючи той самий UUID.

Наприклад, на стороні сервера ви можете спочатку запустити uuid = UUID.randomUUID (), щоб сформувати випадкове число, таке як fb36491d-7c21-40ef-9f67-a63237b5bbea. Потім збережіть цей, а потім жорсткий код, який у програмі прослуховування, як це:

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

Ваша серверна програма Android буде прослуховувати вхідні запити з цим UUID таким чином:

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

BluetoothSocket socket = server.accept ();


1

Підводячи підсумок: UUidвикористовується для однозначної ідентифікації програм. Кожна програма має унікальнийUUid

Отже, використовуйте одне UUidі те ж для кожного пристрою


0

UUID розшифровується як Універсально Унікальний Ідентифікатор. UUID - це проста 128-розрядна цифра, яка унікально розподілена по всьому світу.

Bluetooth передає дані по повітрю, і всі пристрої поблизу можуть їх отримувати. Припустимо, іноді вам доводиться надсилати деякі важливі файли через Bluetooth, і всі пристрої, що знаходяться поруч, можуть отримати до них доступ в діапазоні. Отже, коли ви створюєте пару з іншими пристроями, вони просто діляться номером UUID і збігаються перед тим, як обмінюватися файлами. Коли ви надсилаєте будь-який файл, ваш пристрій зашифровує цей файл за допомогою відповідного UUID пристрою та надає доступ через мережу. Тепер усі пристрої Bluetooth із діапазону можуть отримати доступ до файлу зашифрування, але їм потрібен правильний номер UUID. Тож лише праві UUID-пристрої мають доступ для шифрування файлу, а інші відхилять причину неправильного UUID.

Коротше кажучи, ви можете використовувати UUID як секретний пароль для обміну файлами між будь-якими двома пристроями Bluetooth.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.