我無法通過藍牙連接兩個Android設備,只有在配對之前纔會發生此問題。我運行一個作爲服務器,另一個作爲客戶端。Android藍牙接受()/連接()與已配對的設備
這裏的東西在服務器端的順序:
- 檢查各種藍牙狀態(可用適配器,啓用等)。
- 用我選擇的預定義的UUID調用listenUsingRfcommWithServiceRecord()。
- 請求使設備可發現
- 由於可發現異步發生,我調用accept()並等待傳入連接。
在客戶端:
- 檢查各種藍牙狀態(適配器可用,啓用等)。
- getBondedDevices()中的每個設備,我將getName()與服務器名稱進行比較。如果匹配,請跳到步驟6.
- 開始BT發現
- 對於每個發現的設備(請注意2a的配對設備不會在此顯示),請將設備名稱與服務器名稱進行比較。如果存在匹配,則轉到步驟6。
- 取消發現
- 在那個從步驟2中找到的裝置,呼叫createRfcommSocketToServiceRecord()與已在服務器側使用的相同的預先定義的UUID。
- 調用connect()並等待它返回連接的套接字。
當客戶端和服務器之前從未配對時,上述過程對我來說工作得非常好。但是,在Android註冊到設備列表中後,它們將不可避免地在connect()/ accept()階段超時。
我一直在尋找了兩天的解決方案,並已嘗試了不少事情,包括這一個: Connecting to a already paired Bluetooth device
反射方法不爲我工作的。看起來connect()會立即返回,但是當我嘗試getOutputStream()時,我得到一個異常。在accept()方面,它甚至不記錄有人試圖連接。我認真需要一些幫助或指示讓設備建立連接,一旦他們以前配對。
下面是有關設備的一些信息:
- 我測試服務器和客戶端上的兩個LG G2X手機。
- 他們都在Android 2.3.3上運行,這對應於API級別10.
- 同樣,上述工作在我在設置中手動解除設備配對後運行。
謝謝你提前。我大約在2周內使用Android和藍牙,因此如果您看到任何缺少的步驟或最佳做法,請將它們指出。
getRemoteDevice不是一個靜態方法,你怎麼總是調用它 – raja 2013-02-07 14:06:19
你(幾乎?)要使用BluetoothAdapter.getDefaultAdapter()作爲BluetoothAdapter。以上只是僞代碼,所以你不能簡單地複製和粘貼。 – 2013-02-08 17:21:52
偉大的文章,這實際上是有道理的,因爲該設備是一個參考,並將陳舊。適配器將始終處於最新狀態。 – Cookster 2013-07-19 22:55:18