Подключение к конкретному порту bluetooth на устройстве Bluetooth с помощью Android

Есть ли способ Android для подключения к Bluetooth-устройству с использованием определенного порта вместо использования UUID службы? Я знаю, что этот вариант доступен на других платформах, которые поддерживают Bluetooth (Java ME, например, указав URL-адрес стиля «btspp: //»).

Благодаря!

Хорошо, это было какое-то время, но я нашел решение проблемы. Я на самом деле собирался отказаться и использовать UUID, но я продолжал получать исключение службы обнаружения (IO), и когда я попытался найти решение проблемы с обнаружением службы, я нашел решение своего первоначального вопроса … Ain ' T жизнь что-то? 🙂

В любом случае, это ссылка, на которую я наткнулся , хотя вы должны заметить, что в ответе есть ошибка (они фактически просто подключены к порту 1 вместо использования UUID службы).

И после этого короткого урока истории, вот решение:

Используя отражение, можно создать сокет Rfcomm, соединяющий номер порта, а не UUID:

int bt_port_to_connect = 5; // just an example, could be any port number you wish BluetoothDevice device = ... ; // get the bluetooth device (eg, using bt discovery) BluetoothSocket deviceSocket = null; ... // IMPORTANT: we create a reference to the 'createInsecureRfcommSocket' method // and not(!) to the 'createInsecureRfcommSocketToServiceRecord' (which is what the // android SDK documentation publishes Method m = device.getClass().getMethod("createInsecureRfcommSocket", new Class[] {int.class}); deviceSocket = (BluetoothSocket) m.invoke(device,bt_port_to_connect); 

Несколько замечаний:

  1. Поскольку мы используем Invoke, первым параметром является объект, к которому мы вызываем метод, второй параметр invoke на самом деле является первым параметром функции)
  2. Существует также безопасная версия («createRfcommSocket»), которая принимает номер канала bluetooth как один параметр (опять же, поскольку это вызывает стиль, вам нужно передать объект для вызова метода, как указано в – 1-)
  3. Я нашел то, что кажется ссылкой на прототипы этих функций

Всем удачи.

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

Вы просто даете Android UUID для просмотра, и в клиентском режиме он найдет сокет для автоматического подключения (включая порт). В режиме сервера он будет ожидать, пока указанное устройство инициирует соединение с использованием указанного UUID. Объект BluetoothSocket также действителен, когда установлено соединение (используйте getInput / Output Stream). См. Документацию к серверному сокету и документации к клиентскому сокету .


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

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

 IBluetooth ib =getIBluetooth(); Int otherDevicePort = ib.getRemoteServiceChannel(otherDeviceAddress, UUID);