【问题标题】:Android RFCOMM socket on fixed channel固定通道上的 Android RFCOMM 套接字
【发布时间】:2011-06-20 17:07:54
【问题描述】:

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

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

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

我的问题是有什么方法可以强制 android 使用固定的 RFCOMM 频道号?也许使用反射,比如连接客户端时直接调用 createRfcommSocket 的技巧。

【问题讨论】:

  • 请您帮忙看看您是如何解决这个问题的?

标签: android bluetooth


【解决方案1】:

一种非常骇人听闻的方法是消耗所有频道,然后释放您想要的频道!我和你有同样的问题,这个黑客在这个领域工作了大约一年,没有任何抱怨。这方面存在漏洞,因此成功将取决于您的用例。

最多有 30 个通道,因此您将使用您定义的 UUID 打开 30 个(或更少)连接。现在,使用 spdtool 查找到您想要的通道的套接字连接的 UUID。关闭该连接。

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

我知道这很糟糕,但它适用于我的用例!

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-12-07
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 2014-03-22
      • 2011-07-15
      • 2013-06-28
      • 1970-01-01
      • 2017-10-21
      相关资源
      最近更新 更多