我正在编写一个 Android 应用程序来与完全超出我控制范围的硬件设备进行通信。
我的应用程序使用listenUsingRfcommWithServiceRecord 和UUID 00001101-0000-1000-8000-00805F9B34FB 创建侦听套接字。然后它在该套接字上调用accept()来等待远程设备连接,但它永远不会连接。
我已经与硬件设备的制造商交谈过,他们说他们的设备将“简单地连接到远程设备上的通道 1”。即它不进行 SDP 发现来找出正确的通道号。他们拒绝改变这一点(尽管这当然是错误的)
我的问题是有什么方法可以强制 android 使用固定的 RFCOMM 通道号?也许使用反射,就像连接到客户端时直接调用 createRfcommSocket 的技巧一样。
一种非常hacky的方法是消耗所有通道,然后释放你想要的通道!我和你有同样的问题,这个黑客已经在该领域工作了大约一年,没有任何投诉。这存在漏洞,因此成功与否取决于您的用例。
最多有 30 个通道,因此您将使用您定义的 UUID 打开 30 个(或更少)连接。现在,使用 spdtool 找到您想要的通道的套接字连接的 UUID。关闭该连接。
现在,该通道(在您的例子中为 1)将是唯一可用的通道。按照您想要的方式连接到它。建立连接后,关闭所有其他连接。
我知道这很糟糕,但它对我的用例有用!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)