2011-10-07 76 views
3

當通過UUID方法(其他方法(使用反射)在這裏http://code.google.com/p/android/issues/detail?id=5427)打開藍牙rfcomm套接字 - 我有時會得到以下錯誤(成功連接後),並且套接字未打開:清理失敗的UUID通道查找

E/BluetoothService(21847): Received ACTION_UPDATE_SERVICE_CACHE00:0B:CE:01:2E:00 
D/BluetoothService(21847): updateDeviceServiceChannelCache(00:0B:CE:01:2E:00) 
D/BluetoothService(21847): Cleaning up failed UUID channel lookup: 00:0B:CE:01:2E:00 00001101-0000-1000-8000-00805f9b34fb 

沒有運氣與谷歌在這一個 - 有任何人在這裏線索怎麼回事,以及如何防止呢?

更新:

運行到同一問題的人 - 可能的解決方案:

  1. 建議用戶重新啓動設備,如果我們遇到那個狀態( 非常糟糕UX)
  2. 使用反射方法(骯髒,但大多數時間工作)
  3. 我仍然對新想法開放;-)

我堅持#2在這一刻 - 但等待更好的解決方案。

回答

0

看來,消息是結果,而不是原因。如果在設備上找不到串行端口仿真服務,連接將顯然失敗。

更新

審查code後,一切都似乎確定。所以我的問題是:使用不同設備的相同設備發生隨機錯誤?如果發生在不同的設備上,設備可能沒有註冊SerialPort服務。設備以前是否配對?在使用相同設備隨機出現錯誤的情況下?你是否同時使用連接類?您尚未保護針對併發訪問的方法。對於連續的連接,你沒有保護。如果嘗試在第二次連接後讀取/關閉流,它將失敗(套接字對象已更改)。

看起來沒問題。隨機錯誤發生在同一個設備上?如果是這種情況,您是否在使用該類的併發使用?在第一種情況下,

+0

服務已存在 - 我可以在此設備上以此方式進行連接 - 有時我會遇到該錯誤(一段時間),並在稍後嘗試連接某些連接嘗試 - 但我想擺脫由於該問題導致的延遲。 – ligi

+0

如果您的服務已經被首先拒絕,您只能連接到服務。在J2ME上它可以工作。所以我假設你正在啓動一項發現任務,並且正在連接到服務。有時發現可能會失敗,因此假設設備沒有這種設備。 –

+0

有趣的是,這些模塊甚至沒有做SDP服務發現 - 我確信只有在這個特定時刻才能打開端口 - 使用J2ME更容易,因爲您可以直接連接到端口並完全跳過SDP。 – ligi