createRfcommSocketToServiceRecord配对蓝牙

时间:2011-12-06 22:47:40

标签: android bluetooth embedded connect

我正在尝试连接到嵌入式设备,而蓝牙引脚是1234,当我连接到嵌入式主板时,它要求我在嵌入式主板上输入000000并且不要求我从我的设备输入正确的引脚。我不确定我做错了什么。

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地址。 当然应该让我在手机上输入引脚而不是嵌入式主板上的引脚。

1 个答案:

答案 0 :(得分: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. 现在连接完成了。
  7. 新的RFCOMM连接将不再需要配对,直到其中一个设备的蓝牙适配器失去其电源,或者以某种其他方式(未成对)删除其链接密钥。 在连接之前,由于Android RFCOMM插槽是安全的,我的嵌入式主板将收到验证请求。 因此,对于Android RFCOMM,在我的项目中,我可以让Android仅响应“是/否”(不是PIN)。 (有限的I / O)

    您还可以即时配对,无需用户操作,但这违反了Android API,不推荐使用。使用aidl文件可以更好地控制Android手机的蓝牙芯片。

    别忘了投票!!