Android 2.2上的多播

时间:2010-09-02 00:59:25

标签: android multicast jmdns

有没有人在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库中的套接字侦听器代码从未看到响应数据包。

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

3 个答案:

答案 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中或周围修复。

这有点过于轶事,但这是我测试的内容:

  • HTC Desire,2.2,stock:fail
  • HTC Desire,2.3.7,CyanogenMod:success
  • 摩托罗拉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之前进行编译,这进一步证实了这一理论。

答案 2 :(得分:1)

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

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

您的计算机只能使用WIFI,最好不要使用其他所有网络