Android: как работают UUID Bluetooth?


81

Я не понимаю, что обозначает UUID bluetooth. Обозначают ли UUID протоколы (например, RFCOMM )? Если да, то почему createRfcommSocketToServiceRecord()методы требуют UUID, если они указывают rfcomm прямо в своих именах? Почему образец кода BluetoothChat имеет произвольный жестко заданный UUID?

Мой вопрос возникает, потому что в соответствии с этим вопросом я получаю исключение нулевого указателя, когда устройства под управлением 4.0.4 пытаются подключиться (к внешнему устройству, отличному от Android) с помощью отражения. Однако решение этого вопроса для меня не работает. 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 , вы можете попробовать почитать этот PDF для лучшего понимания протоколов Bluetooth и UUID , - people.csail.mit.edu/rudolph/Teaching/Articles/PartOfBTBook.pdf
нуб

Вопрос: Есть ли какие-либо последствия, если телефон Android не поддерживает UUID с удаленного устройства. (UUID не указан в Android ... getUuids ())?
Orri

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

Ответы:


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 BT SIG 00000000-0000-1000-8000-00805F9B34FB, заменив первые 4 цифры GUID. Ex. RFCOMM - 0x0003, поэтому UUID для службы RFCOMM - 00030000-0000-1000-8000-00805F9B34FB
sam msft

22

Обычно он представляет собой некую общую услугу (протокол), поддерживаемую устройством Bluetooth.

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

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

Смотрите здесь


3
это обычно делает? Когда это не так? Я не понимаю, почему, если я создаю сервер RCOMM, я бы не стал использовать RFCOMM UUID.
ForeverWintr

1
Ну, UUIDэто универсальный идентификатор. RFCOMM - это просто слой в стеке протоколов Bluetooth, связанный с UUID в соответствии со спецификацией Bluetooth; и используется SDP, не совсем уверен для чего; но вы всегда можете прочитать об этом в спецификации. Теперь, если вы создаете службу поверх протокола RFCOMM, вам нужно будет предоставить UUID, как того требует SDP, иначе ваша служба не будет обнаружена.
nullpotent

3
Нашел это в сети. Все?? UUID для BT. sviluppomobile.blogspot.de/2012/11/…
Orri

Ссылка мертва - это был список общих 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.