17

有没有人让多播在 Android 2.2 上工作,特别是用于 Bonjour 服务检测的 JmDNS。Android 1.5->2.0 时间范围内有许多问题和答案,包括在 stackOverflow 上,表明不同程度的成功,以及错误跟踪器中的错误,表明它已修复并关闭,对于 2.2 ( http://code .google.com/p/android/issues/detail?id=2323)。我已经尝试过“TuneControl”源代码,但它在 ~1.5 上有效并且尚未更新,并且在 2.2 上不适用于我。

所以,问题... 1) 有没有在 2.2 上看到多播工作,特别是 JmDNS,特别是用于 Bonjour 服务检测?

2)在代码中需要什么才能使这项工作?

我正在使用适当的权限:

<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />

<uses-permission android:name="android.permission.INTERNET"/>

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

我获得了多播锁:

WifiManager wifi = (WifiManager)getSystemService( Context.WIFI_SERVICE );
if(wifi != null)
{
    MulticastLock mcLock = wifi.createMulticastLock("mylock");
    mcLock.acquire();
...

然后尝试启动 jmDNS 来寻找服务器:

    mdns = JmDNS.create(addr, HOSTNAME);
    jmdns.addServiceListener(TOUCH_ABLE_TYPE, listener);
    jmdns.addServiceListener(DACP_TYPE, listener);
    ...

侦听器永远不会看到任何服务。我已经使用 Wireshark 验证了请求数据包已发送,并且服务器进行了响应,但 jmDNS 库中的套接字侦听器代码从未看到响应数据包。

所以......我错过了什么吗?这仍然是一个错误吗?有没有人得到任何远程这样的工作???

4

3 回答 3

13

为了(粗​​鲁地)回答我自己的问题,另一个人在http://code.google.com/p/android/issues/detail?id=2917#c48提供了更多信息。正如他们所说,为了后代,这是 brian.ro...@gmail.com 的答案...

“我花了很多时间在我的 Evo 和 HTC Hero (CDMA) 上调试 JmDNS 的 mDNS 问题。我发现 Evo 上的 Broadcom 无线驱动程序中似乎有一个过滤器(因为我我从 HTC Desire 用户那里得到了类似的报告 - 使用相同的芯片组,大概也是那个手机)。默认情况下,过滤器会阻止任何非单播或网络广播流量,包括多播。显然理论上它是一种电池保护程序.

问题似乎是 Evo 上的 wpa_supplicant 不支持在您获得 MulticastLock 时删除这些过滤器。(获得锁后立即检查日志输出,您会明白我的意思)。不幸的是,硬件供应商的多播支持支离破碎...... :("

所以......看起来这是一个设备问题而不是编码问题。哦。:( 如果我有机会在另一台设备上进行测试...

于 2010-09-15T05:16:17.737 回答
8

我一直在对此进行一些研究,我认为这通常是 Android 的一个问题,并且在 Android 2.3.7 中或附近得到了修复。

这有点太轶事了,但这是我测试过的:

  • HTC Desire,2.2,库存:失败
  • HTC Desire,2.3.7,CyanogenMod:成功
  • 摩托罗拉里程碑,2.1-update1:​​失败
  • HTC Desire S,2.3.3:失败
  • Acer Iconia A501, 3.2.1:成功
  • 三星的东西,2.3.3:失败
  • HTC Legend, 2.2 我认为:失败

当我说“失败”时,实​​际上他们都能够向“成功”设备发送多播消息,但除了他们自己的消息外,他们永远不会收到任何回复——正如 jldupont 所描述的那样。

请注意,多播 IM 应用程序Kouchat仅适用于 2.3.7 及更高版本,即使它可以编译为早至 2.1,这进一步证明了这一理论。

于 2012-03-23T09:08:06.147 回答
1

我认为另一个原因是您的AP不支持。

其他:计算机向/从 Android 发送/接收

您的电脑只能使用WIFI,最好关闭所有其他网络

于 2012-07-13T02:29:00.023 回答