固定频道上的Android RFCOMM套接字

时间:2011-02-03 14:23:49

标签: android bluetooth

我正在编写一个Android应用程序来与硬件设备通信,这完全不受我的控制。

我的应用程序使用listenUsingRfcommWithServiceRecord和UUID 00001101-0000-1000-8000-00805F9B34FB创建一个侦听套接字。然后它调用该套接字上的accept()来等待远程设备连接,但它永远不会。

我已经与硬件设备的制造商交谈过,他们说他们的设备将“简单地连接到远程设备上的通道1”。即它没有进行SDP发现以找出正确的频道号。他们拒绝改变这一点(即使它当然是错误的)

我的问题是有没有办法强制Android使用固定的RFCOMM频道号码?也许使用反射,就像连接到客户端时直接调用createRfcommSocket的技巧一样。

2 个答案:

答案 0 :(得分:2)

一种非常hackey的方式是消耗所有通道,然后释放你想要的通道!我和你有同样的问题,这个黑客在现场工作了大约一年没有任何抱怨。这有漏洞,所以成功取决于你的用例。

最多有30个频道,因此您可以使用您定义的UUID打开30个连接(或更少)。现在,使用spdtool找到所需通道的套接字连接的UUID。关闭那个连接。

现在,您的情况下,频道1是唯一可用的频道。以您想要的方式连接到它。建立连接后,关闭所有其他连接。

我知道这是hackey,但它适用于我的用例!

答案 1 :(得分:1)

存在这些API,但不受支持。如果您仍然感兴趣,请查看Android 1.5 backport of android.bluetooth源代码的源代码。

但请注意,作为不受支持的API,可以在以后的任何版本中删除它们。