簡體   English   中英

藍牙RFCOMM / SDP連接到Android中的RS232適配器

[英]Bluetooth RFCOMM / SDP connection to a RS232 adapter in android

我正在嘗試使用谷歌提供的藍牙聊天示例API應用程序連接到連接到另一台設備的藍牙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())

我總是得到connect()方法拋出的IOException錯誤。 當我對異常執行toString時,我得到“服務發現失敗”。 我的問題主要是哪些情況會導致在connect方法中拋出IOException 我知道那些是在某個地方的源代碼,但我不確切知道你編寫應用程序的java層和包含實際堆棧接口的C / C ++層。 我知道它使用的是用C / C ++編寫的bluez藍牙堆棧,但不確定它是如何與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我可以掃描並顯然配對就好了。


以下是與類似問題的合並,該問題已在此處通過所選答案成功解決:

如何在Android中連接到另一部手機以外的rfcomm設備?

Android API提供了使用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中看到的唯一記錄的機制是對UUID進行SDP查找,我有點不知所措。 使用我的Linux主機上的“sdptool browse”是空的,所以我猜測有問題的芯片缺乏SDP支持。

好的簡短回答是我必須使用此UUID才能連接到我的SPP設備:

private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

我試圖改變它,因為我認為只有“1101”部分是重要的,因為我看到提到SPP的東西在intertubes上的所有位置,但這使它不再連接。 顯然,特定的UUID應該用於連接到通用SPP設備。 無論如何只是覺得我會把它發布在這里,所以任何這類問題的人都有答案。 花了我3天左右找到它大聲笑!

我想這與索尼 - 愛立信手機漏洞有關( 見這里 )。

我能夠使用藍牙和完全組成的UUID從/向Android 2.0設備和我的mac連接。 嘗試使用j2me設備(索尼愛立信w910i)做同樣的事情只有當android是服務器時工作,否則我會得到與你相同的例外。

據我所知,您正在使用的UUID是spp配置文件的“基地址”,並且在發出服務發現時由服務器設備返回的ServiceRecord的ServiceClassIDList字段中,它應該在UUID之后列出決定使用......適用於某些情況下不是這種情況(例如我的手機首先列出了通用UUID,然后是我的自定義UUID)。

看起來這是同樣的情況。 您可以嘗試手動更改ServiceRecord並返回正確的ServiceClassIDList。 也許它會對你有用..不幸的是,我的愚蠢手機拒絕改變它:(

PS。 一個奇怪的事情是我的mac確實能夠看到服務,即使ServiceRecord被“破壞”,我想android只是懶得看到ServiceClassIDList中的第一個UUID,而我的電腦通過列表搜索每個元素。 但這只是我的假設:)

您設置的波特率必須與它所連接的設備相匹配。 它們具有默認值115200或切換到9600但如果您需要其他(在我的情況下為1200測量儀器),您需要通過超級終端*和零調制解調器電纜進行設置。

*雖然bluesnap設備的文檔建議使用超級終端,但它存在問題。 在幾次調用bluesnap之后,他們建議:

首先,將設備連接到PC時,嘗試使用115200 8,N,1和X關閉將跳線設置恢復到原始位置。 啟用DTE時,如果不使用專門為DTR / DTE連接設計的專用軟件,則無法建立終端連接。

其次,HyperTerminal已經知道BlueSnap的問題。 我建議嘗試TeraTerm或PuTTY。

花了我4天時間才發現這個!

您的藍牙設備設置了什么波特率? 我已連接,但我的數據顯示為混合波特率的典型亂碼。 我的設置為57600,這是我見過其他人使用的。 哦,感謝您發布結果,UUID也讓我工作了幾天。

如果'sdptool browse'報告沒有關於設備的信息,請嘗試'sdptool記錄[device-mac-here]'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM