Хорошо, это было давно, но я нашел решение проблемы. На самом деле я намеревался отказаться от UUID и использовать его, но я продолжал получать исключение Service Discovery Failed (IO), и когда я пытался найти решение проблемы обнаружения службы, я нашел решение моего первоначального вопроса ... 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 (e.g., 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);
Несколько замечаний:
- поскольку мы используем Invoke, первый параметр - это объект, для которого мы вызываем метод, второй параметр invoke - это фактически первый параметр функции)
- Существует также безопасная версия ('createRfcommSocket'), которая принимает номер канала Bluetooth в качестве единственного параметра (опять же, поскольку это стиль вызова, вам нужно передать объект для вызова метода, так как упоминается в -1-)
- Я нашел ссылку на прототипы этих функций
Удачи всем.