Я не понимаю, что обозначает 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. Сюда входят услуги, характеристики и многое другое. Bluetooth поддерживает базу данных с присвоенными номерами для стандартных объектов и назначает поддиапазоны для поставщиков (которые достаточно заплатили за бронирование). Вы можете просмотреть этот список здесь:
https://www.bluetooth.com/specifications/assigned-numbers/
Если вы реализуете стандартную службу (например, последовательный порт, клавиатуру, гарнитуру и т. Д.), Вам следует использовать стандартный UUID этой службы - это позволит вам взаимодействовать с устройствами, которые вы не разрабатывали.
Если вы реализуете настраиваемую службу, вам следует сгенерировать уникальные UUID, чтобы убедиться, что несовместимые сторонние устройства не пытаются использовать вашу службу, думая, что это что-то еще. Самый простой способ - сгенерировать случайные, а затем жестко закодировать результат в вашем приложении (и, конечно же, использовать те же UUID в устройствах, которые будут подключаться к вашей службе).
источник
UUID используется для однозначной идентификации информации. Он идентифицирует конкретную услугу, предоставляемую устройством Bluetooth. Стандарт определяет базовый
BASE_UUID: 00000000-0000-1000-8000-00805F9B34FB
.Такие устройства, как медицинские датчики, могут предоставлять услугу, заменяя первые восемь цифр заранее заданным кодом. Например, устройство, которое предлагает соединение RFCOMM, использует короткий код: 0x0003
Таким образом, телефон Android может подключиться к устройству, а затем использовать протокол обнаружения служб (SDP), чтобы узнать, какие службы он предоставляет (UUID).
Во многих случаях вам не нужно использовать эти фиксированные UUID. В случае, если вы создаете приложение чата, например, один телефон Android взаимодействует с другим телефоном Android, который использует то же приложение и, следовательно, тот же UUID.
Итак, вы можете установить произвольный UUID для своего приложения, используя, например, один из множества генераторов случайных UUID в сети ( например ).
источник
Обычно он представляет собой некую общую услугу (протокол), поддерживаемую устройством Bluetooth.
При создании собственного сервера rfcomm (с
listenUsingRfcommWithServiceRecord
) вы должны указать свой собственный UUID, чтобы клиенты, подключающиеся к нему, могли его идентифицировать; это одна из причин, по которойcreateRfcommSocketToServiceRecord
требуется параметр UUID.В противном случае некоторые общие службы имеют одинаковый UUID, просто найдите тот, который вам нужен, и используйте его.
Смотрите здесь
источник
UUID
это универсальный идентификатор. RFCOMM - это просто слой в стеке протоколов Bluetooth, связанный с UUID в соответствии со спецификацией Bluetooth; и используется SDP, не совсем уверен для чего; но вы всегда можете прочитать об этом в спецификации. Теперь, если вы создаете службу поверх протокола RFCOMM, вам нужно будет предоставить UUID, как того требует SDP, иначе ваша служба не будет обнаружена.UUID по понятию аналогичен номерам портов в Интернете. Однако разница между Bluetooth и Интернетом заключается в том, что в Bluetooth номера портов назначаются динамически сервером SDP (протокол обнаружения служб) во время выполнения, где каждому UUID дается номер порта. Другие устройства будут запрашивать сервер SDP, который зарегистрирован под зарезервированным номером порта, о доступных службах на устройстве, и он ответит разными службами, которые отличаются друг от друга тем, что зарегистрированы под разными UUID.
источник
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 ();
источник
Подводя итог:
UUid
используется для однозначной идентификации приложений. Каждое приложение имеет уникальныйUUid
Итак, используйте одно и то же
UUid
для каждого устройстваисточник
UUID означает универсальный уникальный идентификатор. UUID - это простая 128-битная цифра, уникально распределенная по всему миру.
Bluetooth отправляет данные по воздуху, и все находящиеся поблизости устройства могут их получать. Предположим, иногда вам нужно отправить какие-то важные файлы через Bluetooth, и все находящиеся рядом устройства могут получить к ним доступ в радиусе действия. Поэтому, когда вы соединяетесь с другими устройствами, они просто передают номер UUID и сопоставляются, прежде чем делиться файлами. Когда вы отправляете какой-либо файл, ваше устройство шифрует этот файл с помощью соответствующего UUID устройства и передает его по сети. Теперь все устройства Bluetooth в диапазоне могут получить доступ к зашифрованному файлу, но для них требуется правильный номер UUID. Таким образом, только правильные устройства с UUID имеют доступ для шифрования файла, а другие отклонят причину неправильного UUID.
Короче говоря, вы можете использовать UUID в качестве секретного пароля для обмена файлами между любыми двумя устройствами Bluetooth.
источник