2011-03-22 84 views
1

我正在嘗試使用藍牙(SPP)爲medical device開發Android應用程序。我已經使用BluetoothChat作爲起點(另請參閱earlier post)。現在我想我正面臨一個奇怪的問題,而且我在描述它時也遇到了麻煩。在Nexus S上進行測試。藍牙連接僅適用於第一次

完成測量後,醫療設備會檢查其存儲器中的藍牙地址和其他有關先前配對的設備的信息。如果發現它會嘗試啓動連接(而手機上的應用程序正在監聽連接),然後傳輸數據,否則它將開始查詢過程。

第一次工作正常:配對程序,建立連接和傳輸數據。當收到數據時,應用程序回覆一個ACK包,連接終止。

其餘的時間它不工作:經過測量我可以看到在LogCat中,手機從設備接收信號(就像第一次),所以我知道該設備保存手機藍牙地址。似乎系統忽略了信號(或者至少沒有發生任何事情),沒有建立連接,因此即使我使用accept-方法BluetoothServerSocket與它的工作方式相同,也沒有數據傳輸。如果我從手機中刪除配對記錄,則此信號開始配對過程,並且設備再次配對,但它們仍不會建立連接或傳輸數據。我猜想關於信號的消息代表嘗試建立連接,但有些事情是錯誤的。日誌中的消息是相同的,當連接成功,並且可以在logcat的可以看出:

03-22 14:21:55.335:ERROR/BluetoothEventLoop.cpp(114):event_filter:收到的信號org.bluez.Device:從/組織的PropertyChanged/bluez的/ 4123/hci0/dev_00_A0_96_2D_05_E8

這是相當混亂它在日誌中的錯誤信息,如果存在的話它的工作原理也是如此。

奇怪的是,它第一次配對成功,但從未再次發生。當數據傳輸並且設備收到ACK時,它將保存藍牙地址「和其他有用的信息」。我能夠複製成功的'第一次'的唯一方法是將醫療設備與其他設備配對,然後再將其與應用程序再次配對。

我很困惑究竟是什麼導致了這個問題。 有沒有人有任何線索?

我擔心我的問題有點特殊,如果遇到問題的原因是醫療設備而不是手機,那麼請他人熟悉。我在想這可能與Link Key或Channel有關?但另一方面,正如我所說的,如果我從電話中刪除配對,我會再次收到配對請求。

醫療設備是舊的,使用藍牙1.2。現在,我覺得我應該看看是否有任何與連接有關的問題。 是否可能是使用藍牙1.2的設備具有另一個策略,即配對時要存儲哪些信息?

目前我覺得我正在努力解決一個我並不完全瞭解的問題,但如果我稍後能理解,我當然會回到我的結論。我希望我沒有忘記重要的細節。

預先感謝/ F

回答

0

聽起來就像是問題是與醫療裝置,它不能重新建立與已配對設備連接(即重新認證)。 我不認爲1.2是重要的。這些程序被設計爲向後兼容,以便所有藍牙版本相互協作。 您可能必須獲得bluetooth sniffer trace以檢查可能會發生的情況,以驗證問題是否出現在醫療設備端。

另一種選擇是檢查android是否有任何方式來打開更詳細的藍牙交互記錄並啓用它。 Android消息的默認日誌是非常高的水平,並沒有提供太多的細節

+0

謝謝你的好建議。我沒有想到這樣一個計劃。我可能已經在這個問題上停留了很長一段時間,並在嘗試深入挖掘時失去了廣泛的視野。我會嘗試一下,看看我能從中得到什麼,並獲得有關進展的更多信息。 – Fredricus 2011-03-23 07:56:14

+0

我無法獲得一個嗅探器,但我已經與製造商通話,問題是設備保存套接字,即通道,而配對和使用listenUsingRfcommWithServiceRecord意味着系統將分配一個未使用的RFCOMM通道聆聽「。所以,我需要設置通道或關閉並創建一個新的服務器套接字,直到獲得正確的Rfcomm通道。所以這是我的新問題。我在看[這個問題](http://stackoverflow.com/questions/4887307/android-rfcomm-socket-on-fixed-channel)但我仍然希望有一個更好的解決方案? – Fredricus 2011-03-28 08:46:14

+0

我還沒有找到這個,所以我猜不是,但是..是否有可能在標準API的幫助下檢查Rfcomm頻道的數量? – Fredricus 2011-03-28 08:47:54

1

嗨fredricus我的問題是類似於你的即時通訊運行一個藍牙服務,它保持在藍牙on.u數據監聽已經解決了問題將Android設備連接到醫療設備,因爲您提到您已經使用了反射。但是如果醫療啓動連接,它將能夠連接到Android設備。

+0

那麼,要清楚:在我的情況下,醫療設備連接到我的Android應用程序提供的藍牙服務。我設法讓醫療設備連接到它,我用反射來獲取端口(RFCOMM通道)。所以,如果這是你的問題,你應該嘗試[這裏]找到的反射代碼(http://code.google.com/p/android/issues/detail?id=5427)。 – Fredricus 2011-03-30 07:08:32

+0

此外,如果醫療設備啓動連接,請注意您必須小心服務名稱和UUID(用於設置協議/配置文件),以確保設備實際嘗試連接到您的藍牙服務。您可以在[此鏈接](http://bluecove.org/bluecove/apidocs/javax/bluetooth/UUID.html)中找到相應Profile/Protocol的UUID:s。 – Fredricus 2011-03-30 07:23:01