有没有人在 Android 2.2 上使用 Multicast,特别是用于 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 库中的套接字侦听器代码从未看到响应数据包。

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

有帮助吗?

解决方案

为了(粗​​鲁地)回答我自己的问题,提供了更多信息 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用户获得了类似的reptrt - 带有相同的芯片组,也可能是该手机)。默认情况下,该过滤器会阻止任何非unicast或网络广播流量,包括多播。显然,理论是节省电池。

该问题似乎是EVO上的WPA_Supplicant在您获得多频道时不支持删除这些过滤器。(在获得锁后立即检查日志输出,您会明白我的意思)。不幸的是,发生的事情是硬件供应商已经分散了多播支持。:("

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

其他提示

我已经做了一些研究到这一点,我认为这是一个问题与在一般情况下,和固定在或周围的安卓2.3.7.

这是一个有点太传闻,但这里是我的测试:

  • 宏达的愿望,2.2、股票:失败
  • 宏达的愿望,2.3.7,独立的:成功
  • 摩托罗拉的里程碑,2.1-更新1:失败
  • 宏达的愿望S2.3.3:失败
  • 电脑A501、3.2.1:成功
  • 三星什么的,2.3.3:失败
  • 宏达传说,2.2我认为:失败

当我说"失败",事实上他们都能够播送消息的'成功'的设备,但从未收到任何东西回来除非他们自己的信息-因为jldupont描述的。

注意播IM应用程序 Kouchat 仅适用于2.3.7起,尽管它可以作为汇编可回溯2.1,其中提供了进一步证实了这一理论。

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

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

计算机必须只使用WIFI,最好关闭所有其他网络

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top