在Android的蓝牙中,BluetoothSocket.connect会调用SDP来获取新的频道

时间:2012-11-04 13:49:31

标签: android sockets bluetooth sdp

作为问题标题的延续,我通过从配对设备中选择 BluetoothDevice 设备并执行以下操作来获取BluetoothSocket:

bSocket = device.createInsecureRfcommSocketToServiceRecord(myUUID);
bSocket.connect();

我的问题是:假设在配对时通过UUID进行通信的频道被记录为频道-2,但在连接时,其他设备已将其收听者切换到频道3并且正在频道上进行广告服务-3为同一个myUUID。

当我执行 connect 时,是否会尝试连接到channel-2(在缓存中,请参阅我的其他question)或将它(.connect命令)执行新的SDP获取当前通道即3并尝试连接到通道3(和myUUID)。

是否可以通过 connect 命令查看尝试了哪个频道。

感谢。

1 个答案:

答案 0 :(得分:1)

Android上有一些用于蓝牙的隐藏(隐藏)功能可能有所帮助。 它被称为IBluetooth。 Here 是对如何使用它的说明。

运行后,尝试 getRemoteServiceChannel 功能和 onRfcommChannelFound 回调 - 它将获得正确的通道,并分别显示为您的UUID找到的通道。< / p>

通常情况下,出现错误,我希望您在第一次连接时获得通道2,然后什么也得不到。这意味着Android很懒,并且没有进行另一次SDP浏览。

如何让他们正确连接?也许如果你运气好,在通道2连接后,调用这些隐藏的函数会刷新它的SDP数据库吗?! 另一种方法是解密它们并以编程方式重新绑定它们 - 我怀疑它会让它再做一次SDP浏览......

如果有用,请不要忘记投票