Подтвердить что ты не робот

Android: Как работают UUID для Bluetooth?

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

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

Изменить. Я решил эту проблему путем жесткого кодирования UUID для службы Serial Port в соответствии с этим ответом (используя UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");).

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

Кто-нибудь может меня выправить?

4b9b3361

Ответ 1

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

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

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

Смотри здесь

Ответ 2

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

Устройства, такие как датчики здравоохранения, могут предоставлять услугу, заменяя первые восемь цифр на предопределенный код. Например, устройство, которое предлагает соединение RFCOMM, использует короткий код: 0x0003

Таким образом, телефон Android может подключиться к устройству, а затем использовать протокол обнаружения служб (SDP), чтобы узнать, какие службы он предоставляет (UUID).

Во многих случаях вам не нужно использовать эти фиксированные UUID. В случае, если вы создаете приложение чата, например, один телефон Android взаимодействует с другим телефоном Android, который использует одно и то же приложение и, следовательно, тот же UUID.

Таким образом, вы можете установить произвольный UUID для своего приложения, используя, например, один из многих генераторов случайных UUID в Интернете (например).

Ответ 3

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();

Ответ 5

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

Итак, используйте те же UUid для каждого устройства

Ответ 6

В Bluetooth все объекты идентифицируются по UUID. К ним относятся услуги, характеристики и многое другое. Bluetooth поддерживает базу данных назначенных номеров для стандартных объектов и назначает поддиапазоны для поставщиков (которые заплатили достаточно за резервирование). Вы можете просмотреть этот список здесь:

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

Если вы внедряете стандартную услугу (например, последовательный порт, клавиатуру, гарнитуру и т.д.), Вам следует использовать этот стандарт сервиса UUID - это позволит вам взаимодействовать с устройствами, которые вы не разрабатывали.

Если вы внедряете пользовательскую службу, вам следует сгенерировать уникальные UUID, чтобы убедиться, что несовместимые сторонние устройства не пытаются использовать вашу службу, думая, что это что-то другое. Самый простой способ - сгенерировать случайные и затем жестко закодировать результат в вашем приложении (и, конечно, использовать те же UUID на устройствах, которые будут подключаться к вашему сервису).