2011-12-06 105 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手机的蓝牙芯片。

不要忘了投票!