有没有人让多播在 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 库中的套接字侦听器代码从未看到响应数据包。
所以......我错过了什么吗?这仍然是一个错误吗?有没有人得到任何远程这样的工作???