有没有人在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库中的套接字侦听器代码从未看到响应数据包。
所以...我错过了什么?这仍然是一个错误吗?有没有人得到任何东西甚至远程这样工作???
答案 0 :(得分:13)
(粗鲁地)回答我自己的问题,另一个人在http://code.google.com/p/android/issues/detail?id=2917#c48提供了更多信息。对于后代,正如他们所说,这里是brian.ro ... @ gmail.com的答案......
“我花了很多时间 我的JmDNS调试mDNS问题 Evo和HTC Hero(CDMA)。我找到了什么 似乎有一个过滤器 置于broadcom无线驱动程序中 在Evo上(因为我得到了一个 来自HTC Desire用户的类似代表 - 使用相同的芯片组,大概也就是手机)。过滤器,由 默认情况下,阻止任何非单播或 网络广播流量,包括 多播。显然这个理论是 它是节电器。
问题似乎是 Evo上的wpa_supplicant没有 支持删除那些过滤器 你得到一个MulticastLock。 (检查 收到后立即输出日志 锁定,你会看到我的意思)。 不幸的是发生的事情是 硬件供应商已经支离破碎 多播支持.... :(“
所以......看起来这是一个设备问题而不是编码问题。 D'哦。 :(如果我有机会在另一台设备上测试......
答案 1 :(得分:7)
我一直在对此进行一些研究,我认为这是一般的Android问题,并在Android 2.3.7中或周围修复。
这有点过于轶事,但这是我测试的内容:
当我说'失败'时,实际上他们都能够向'成功'设备发送多播消息,但除了他们自己的消息之外从未收到任何回复 - 正如jldupont描述的那样。
请注意,多播IM应用程序Kouchat仅适用于2.3.7及更高版本,即使它可以在2.1之前进行编译,这进一步证实了这一理论。
答案 2 :(得分:1)
我认为另一个原因是你的AP不支持。
其他:计算机向/从Android发送/接收
您的计算机只能使用WIFI,最好不要使用其他所有网络