2011-12-06 132 views
2

我想連接到嵌入式設備,藍牙引腳是1234,當我連接到嵌入式板時,它要求我在嵌入式主板上輸入000000,而不是要求我輸入正確的引腳從我的設備。我不確定我做錯了什麼。createRfcommSocketToServiceRecord配對藍牙

public void connectBluetooth() throws IOException{ 
     device = bluetoothAdapter.getRemoteDevice(MAC); 
     try { 
      mSocket = device.createRfcommSocketToServiceRecord(MY_UUID); 
     } catch (IOException e) { 
      Log.e(tag, "+++++Failed to create RFCOMM connection+++++"); 
     } 
     try{ 
      mSocket.connect(); 
      Log.e(tag, "+++++connecting+++++"); 
      manageBluetooth manageThread = new manageBluetooth(); 
      manageThread.start(); 
      threadCheck = true; 
     }catch(IOException e){ 
      Log.e(tag, "+++++Failed to connect+++++"); 
     } 
     Log.e(tag, "+++++After catch+++++"); 
    } 
} 

我打電話進出manageThread,我也說明了正確的MAC地址。 當然,它應該要求我在手機上輸入管腳,而不是在自己的嵌入式主板上。

回答

0

你能解釋一下你正在使用哪種嵌入式主板嗎?

當發生pairing時,設備相互指示他們對於所需連接的輸入/輸出可能性。

問題是你的兩個設備發出不同的信號。 也許,Android想要使用密鑰輸入來執行SPP,而嵌入式設備則嘗試使用舊配對。您需要發佈更多代碼才能獲得更清晰的回覆。

這裏是我的情況: - Android是RFCOMM服務器 - 嵌入式板是RFCOMM客戶端(啓動連接) 想象他們是不成對的。

  1. 嵌入式主板瀏覽Android SDP尋找與UUID相匹配的RFCOMM套接字(實際上是通道)。
  2. 嵌入式板嘗試連接。
  3. 嵌入式主板收到一個請求,詳細介紹其I/O功能和綁定設置(用於綁定)。它必須迴應。 假設它用MITM保護響應,需要綁定,它也會說它沒有I/O功能
  4. 嵌入式主板接收Android驗證要求(MITM保護,需要綁定)
  5. Android顯示接受/拒絕對話框。
  6. 現在連接通過。

配對將不再需要新的RFCOMM連接,直到其中一個設備的藍牙適配器失去電源,或者它以其他方式刪除其鏈接鍵(取消配對)。 連接之前,由於Android RFCOMM插口是安全的,因此我的嵌入式主板將收到驗證請求。 因此,對於Android RFCOMM,在我的項目中,我可以讓Android僅回答「是/否」(不是PIN)。 (有限的I/O)

您也可以立即進行配對並且無需用戶操作,但這是違反Android API的,並且不推薦。使用aidl文件可以更好地控制Android手機的藍牙芯片。

不要忘了投票!