好吧,這裏是交易。我有兩個啓用藍牙的Galaxy Nexus手機。Android藍牙IOException:連接被拒絕
我寫了一個藍牙連接管理應用程序,用於設備發現和連接。它還輸出設備可支持的所有可用UUID。
從http://www.bluetooth.org/Technical/AssignedNumbers/service_discovery.htm查看以下標準UUID是從Galaxy Nexus設備公開的。
- 0x1116 - NAP
- 0x112f - PBAP(電話簿連接配置文件)
- 0x111F的 - HFP(免提)
- 0x1105 - OPP(對象推送模式)
- 0x1112 - HSP(耳機模式)
- 0x110c - AVRCP
- 0x110a - A2DP
我正嘗試通過OPP配置文件(UUID 00001105-0000-1000-8000-00805F9B34FB
)連接並在設備之間推送對象(文件)。我已經去了整個Android API documentation如何發現,配對/綁定(線程等)和管理所有的藍牙連接。我設法通過SPP(0x1101)配置文件成功連接並與傳統主板設備通話。
但是,當我嘗試在兩個星系聯網電話之間使用socket.connect()
時,配對對話框出現,並且我在兩個設備上單擊了Pair
按鈕。之後,我立即得到一個Connection Refused IOException
。請注意,在配對發生後,一旦我再也不會再問到問題,因爲安全鏈接已被緩存。
如果我無法使用這些標準UUID連接到這些標準配置文件,爲什麼它們暴露?如何從我的應用程序連接到這些配置文件中的任何一個並與它們交互?是否因爲我的應用程序不是某種可信的?奇怪的是,即使Android上的Share
功能也根本不起作用。這是Android上完全破壞的東西嗎?
請避免給我暗示使用「衆所周知的UUID SPP一個0x1101」像文檔說。這不是我想要的。我對這些東西的工作原理有了很好的理解,並且正在尋找真正的解決方案或問題的解釋。
我見過典型的「反射」解決方案,但我不明白爲什麼這仍然是Android上的問題?爲什麼人們使用反思來完成這項工作?我們可以在Android上提交一個錯誤來解決這個問題嗎?
如果這些UUID是標準的,那麼任何應用程序都應該能夠連接並與它們交互。爲什麼這是一個問題,爲什麼我會得到這個異常?
在此先感謝。
UPDATE
所以,出於某種原因,在Android系統中的對象推送開始工作。我實際上試圖通過我的應用程序連接,它不工作。然後,我去了通訊錄應用程序,並試圖分享一個神奇的聯繫人。然後,我回到我的應用程序,現在它的工作原理...哇。這很奇怪,必須有解釋。
你設置了正確的權限? http://developer.android.com/guide/topics/connectivity/bluetooth.html#Permissions – Lars
@Lars當然,他做到了。 dnkoutso:你究竟打開了什麼插口?你可以嘗試重新配對,那就是 - 不配對然後再配對。順便說一句,它是2層? – nullpotent
@iccthedral,你是什麼意思2層?我經常進入兩臺設備上的真實設置應用並刪除配對。一旦我再次調用'socket.connect()',它會提示我配對對話框和填入的密鑰號碼。不幸的是,在我得到「Connection Refused」IOException後。 – dnkoutso