0

目前我有一个关于同时使用 Android Wifi、蓝牙 API 的问题。

(请注意,这是应用程序开发的问题,而不是普通用户指南)

我在通过 Wifi 搜索设备服务的同时通过蓝牙搜索设备时遇到问题。

欲了解更多信息:

  • 在 wifi 搜索中,我使用 Bonjour 协议(Apple 的 Zeroconf 实现,可以帮助定位本地网络设备提供的服务)。我使用的 Java 实现是jmdns。在搜索会话期间,我创建了一个MulticastLock以接收 Bonjour 的多播包。

  • 在蓝牙搜索中,我只是使用 BluetoothAdapter 和 BroadcastReceiver 来获取蓝牙设备信息。

搜索结果出现问题,每当同时执行上述两个搜索会话时,Bonjour (Wifi) 搜索上的 mysearch 结果永远不会像只执行它时那样得到足够的结果。

例如: Bonjour 搜索与蓝牙一起搜索时只获得 1 个而不是 2 个设备的服务。但是,蓝牙搜索结果总是足够的。

这被尝试了很多次,我肯定确认没有与网络强度问题有关。

有没有人遇到过这个问题?

即使您的情况是使用Wifi和蓝牙,任何经验或客人对我都非常有帮助!

科伊。

4

1 回答 1

0

我正在做与你正在做的几乎相同的事情。我的经历不同在于:

  • 我不使用蓝牙发现,因为我知道我想连接什么设备。我只是启动一个客户端连接。
  • 我使用 Asynctasks 进行后台操作。你在用什么?

两个可能的问题:

  1. 由于 Android 错误实现,多个 Asynctask 未并行执行。在将我的 Android API 目标设置为最新的 SDK 后,我遇到了类似的错误(因为这是最佳实践)。现在,在 API13 之后,Android Asynctask 实现发生了变化,任务不再并行执行(所以我的 wifi 线程从未启动,例如,如果蓝牙线程正在运行!!!)。修复方法是添加几行代码以使默认执行程序再次并行,或者仅使用 API11 或更低版本作为目标版本。有关详细信息,请参阅此线程

  2. 2. OverTheAir 之间的干扰。据我所知,蓝牙发现是您可以在蓝牙上进行的最昂贵的操作。这样2.4GHz的多用途芯片就可能在空中被淹没。内部WiFi和BT共存。请记住 2.4GHz 上的 WiFi 和蓝牙通道重叠。因此,我所说的同时在相同的主频率上进行发现可能效果不佳。你应该调查一下...

于 2013-03-21T14:02:50.873 回答