createRfcommSocketToServiceRecord 配对蓝牙

问题描述 投票:0回答:1

我正在尝试连接到嵌入式设备,蓝牙引脚为 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地址。 当然,它应该要求我在手机上输入密码,而不是在嵌入式板上输入密码。

android bluetooth embedded
1个回答
0
投票

您能解释一下您使用的是哪种嵌入式板吗?

发生配对时,设备会相互指示所需连接的输入/输出可能性。

问题是您的两个设备发出不同的信号。 也许,Android 希望通过密钥输入执行 SPP,而您的嵌入式设备则尝试传统配对。您需要发布更多代码才能获得更清晰的响应。

这是我的场景: - Android是RFCOMM服务器 - 嵌入式板为RFCOMM客户端(发起连接) 想象一下他们没有配对。

  1. 嵌入式板浏览 Android SDP,寻找与 UUID 匹配的 RFCOMM 套接字(实际上是通道)。
  2. 嵌入式板尝试连接。
  3. 嵌入式板收到详细说明其 I/O 功能和绑定设置(用于绑定)的请求。它必须做出回应。 假设它响应 MITM 保护,需要绑定,并且它还会说它没有 I/O 功能
  4. 嵌入式板接收Android的认证要求(MITM保护,需要bonding)
  5. Android 显示接受/拒绝对话框。
  6. 现在连接成功。

新的 RFCOMM 连接不再需要配对,直到其中一个设备的蓝牙适配器失去电源,或者以其他方式删除其链接密钥(取消配对)。 在连接之前,由于 Android RFCOMM 套接字是安全的,因此我的嵌入式板将收到身份验证请求。 因此,对于 Android RFCOMM,在我的项目中,我可以让 Android 仅使用“是/否”(而不是 PIN)进行响应。 (有限的 I/O)

您还可以在无需用户操作的情况下进行即时配对,但这违反了 Android API,不建议这样做。使用aidl文件可以更好地控制Android手机的蓝牙芯片。

别忘了投票!!

© www.soinside.com 2019 - 2024. All rights reserved.