Android 2.2上的多播

Bre*_*and 16 android multicast jmdns

有没有人在Android 2.2上使用Multicast,特别是用于Bonjour服务检测的JmDNS.Android 1.5-> 2.0时间帧有很多问题和答案,包括stackOverflow,表明不同程度的成功,以及错误跟踪器中的错误,表明它已修复并关闭,为2.2(http://代码.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"/>
Run Code Online (Sandbox Code Playgroud)

我获得了多播锁:

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

然后尝试启动jmDNS以查找服务器:

    mdns = JmDNS.create(addr, HOSTNAME);
    jmdns.addServiceListener(TOUCH_ABLE_TYPE, listener);
    jmdns.addServiceListener(DACP_TYPE, listener);
    ...
Run Code Online (Sandbox Code Playgroud)

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

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

Bre*_*and 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时删除这些过滤器.(获得锁定后立即检查日志输出,你会明白我的意思).不幸的是,硬件供应商已经支离破碎的多播支持...... :("

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


Rob*_*ham 7

我一直在对此进行一些研究,我认为这是一般的Android问题,并在Android 2.3.7中或周围修复.

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

  • HTC Desire,2.2,股票:失败
  • HTC Desire,2.3.7,CyanogenMod:成功
  • 摩托罗拉Milestone,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之前进行编译,这进一步证实了这一理论.