Я пытаюсь использовать пример приложения API чата Bluetooth, которое предоставляет Google, для подключения к адаптеру Bluetooth RS232, подключенному к другому устройству. Вот приложение для справки:
http://developer.android.com/resources/samples/BluetoothChat/index.html
А вот спецификация для разъема RS232 просто для справки:
http://serialio.com/download/Docs/BlueSnap-guide-4.77_Commands.pdf
Ну, проблема в том, что, когда я иду, чтобы подключиться к устройству с:
mmSocket.connect(); (BluetoothSocket::connect())
Я всегда получаю ошибку IOException
, генерируемую методом connect()
. Когда я делаю toString
для исключения, я получаю «Обнаружение службы не удалось». Мой вопрос в основном в каких случаях вызовет IOException
в методе соединения? Я знаю, что они где-то есть в источнике, но я не знаю точно, как на Java-уровне вы пишете приложения, и на C / C ++-уровне, который содержит реальный интерфейс стеков. Я знаю, что он использует стек bluez bluetooth, который написан на C / C ++, но не уверен, как он связан с уровнем Java, что, я думаю, вызывает исключение. Любая помощь, указав мне, где я могу попытаться разобрать эту проблему, была бы невероятной.
Также просто хочу отметить, что я могу подключиться к адаптеру RS232 просто отлично, но я не могу подключиться. Вот вывод logcat для большей справки:
I/ActivityManager( 1018): Displayed activity com.example.android.BluetoothChat/.DeviceListActivity: 326 ms (total 326 ms)
E/BluetoothService.cpp( 1018): stopDiscoveryNative: D-Bus error in StopDiscovery: org.bluez.Error.Failed (Invalid discovery session)
D/BluetoothChat( 1729): onActivityResult -1
D/BluetoothChatService( 1729): connect to: 00:06:66:03:0C:51
D/BluetoothChatService( 1729): setState() STATE_LISTEN -> STATE_CONNECTING
E/BluetoothChat( 1729): + ON RESUME +
I/BluetoothChat( 1729): MESSAGE_STATE_CHANGE: STATE_CONNECTING
I/BluetoothChatService( 1729): BEGIN mConnectThread
E/BluetoothService.cpp( 1018): stopDiscoveryNative: D-Bus error in StopDiscovery: org.bluez.Error.Failed (Invalid discovery session)
E/BluetoothEventLoop.cpp( 1018): event_filter: Received signal org.bluez.Device:PropertyChanged from /org/bluez/1498/hci0/dev_00_06_66_03_0C_51
I/BluetoothChatService( 1729): CONNECTION FAIL TOSTRING: java.io.IOException: Service discovery failed
D/BluetoothChatService( 1729): setState() STATE_CONNECTING -> STATE_LISTEN
D/BluetoothChatService( 1729): start
D/BluetoothChatService( 1729): setState() STATE_LISTEN -> STATE_LISTEN
I/BluetoothChat( 1729): MESSAGE_STATE_CHANGE: STATE_LISTEN
V/BluetoothEventRedirector( 1080): Received android.bleutooth.device.action.UUID
I/NotificationService( 1018): enqueueToast pkg=com.example.android.BluetoothChat callback=android.app.ITransientNotification$Stub$Proxy@446327c8 duration=0
I/BluetoothChat( 1729): MESSAGE_STATE_CHANGE: STATE_LISTEN
E/BluetoothEventLoop.cpp( 1018): event_filter: Received signal org.bluez.Device:PropertyChanged from /org/bluez/1498/hci0/dev_00_06_66_03_0C_51
V/BluetoothEventRedirector( 1080): Received android.bleutooth.device.action.UUID
Устройство, к которому я пытаюсь подключиться, - это 00:06:66:03:0C:51
, которое я могу отсканировать и, по-видимому, прекрасно с ним связывается.
Ниже приведен аналогичный вопрос, который был успешно решен выбранным ответом здесь:
API Android предоставляет примеры использования listenUsingRfcommWithServiceRecord () для настройки сокета и createRfcommSocketToServiceRecord () для подключения к этому сокету.
Я пытаюсь подключиться к встроенному устройству с чипом BlueSMiRF Gold . Мой рабочий код Python (использующий библиотеку PyBluez ), который я хотел бы перенести на Android, выглядит следующим образом:
sock = bluetooth.BluetoothSocket(proto=bluetooth.RFCOMM)
sock.connect((device_addr, 1))
return sock.makefile()
... поэтому служба, к которой нужно подключиться, просто определяется как канал 1, без поиска SDP.
Поскольку единственный документированный механизм, который я вижу в Android API, выполняет поиск UDP UDP, я немного растерялся. Использование «sdptool browse» с моего Linux-хоста оказывается пустым, поэтому я предполагаю, что у данного чипа просто отсутствует поддержка SDP.