作为问题标题的延续,我通过从我配对的设备中选择一个 BluetoothDevice 设备并执行以下操作来获取 BluetoothSocket:
bSocket = device.createInsecureRfcommSocketToServiceRecord(myUUID);
bSocket.connect();
我的问题是:假设在配对时通过 UUID 进行通信的 channel 被记录为 channel 2,但在连接时另一台设备已将其监听器切换到 channel 3 并在 channel 上广播服务-3 对于相同的 myUUID。
当我执行连接时,它会尝试连接到 channel 2(在缓存中,引用我的另一个 question)还是会(.connect 命令)执行新的 SDP获取当前 channel ,即 3 并尝试连接到 channel 3(和 myUUID)。
是否可以通过connect 命令查看尝试了哪个 channel 。
谢谢。
最佳答案
Android 上有一些隐藏(模糊)的蓝牙功能可能会有所帮助。 它被称为 IBluetooth。 <强> Here 是如何使用它的说明。
一旦你开始运行,尝试 getRemoteServiceChannel 函数和 onRfcommChannelFound 回调 - 它将获得正确的 channel 并分别显示为你的 UUID 找到的 channel 。
通常,由于您的错误,我希望您在第一次连接时获得 channel 2,然后什么也得不到。这意味着 Android 是懒惰的,没有进行另一次 SDP 浏览。
如何让它们正确连接?也许如果你运气好,在 channel 2 连接后,调用这些隐藏函数会刷新它的 SDP 数据库?! 另一种方法是解除它们的绑定(bind)并以编程方式重新绑定(bind)它们 - 我怀疑这会让它进行另一次 SDP 浏览......
如果有用,别忘了投票
关于android - 在 Android 的蓝牙中,BluetoothSocket.connect 是否调用 SDP 来获取新 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13219102/