如何在Android上接收多播包

我试图从多播地址接收数据,但是对MulticastSocket.receive()的调用会阻塞,直到发生超时。 我做了一些networking嗅探,发现我的设备(和模拟器)永远不会发送一个MulticastSocket.joinGroup请求。 我尝试从我的PC运行相同的Java代码作为一个独立的应用程序,它运行良好。 是否Android平台会阻止IGMPjoin请求? 有没有人以前在Android上成功使用过多播?

我的清单文件包含以下权限:

我在2.1(模拟器和设备)上运行我的应用程序。

任何想法的人?

谢谢,

Solutions Collecting From Web of "如何在Android上接收多播包"

卢卡斯给出了我在他的博客上看到的最好的解释和例子: http : //codeisland.org/2012/udp-multicast-on-android

综上所述:
1.您需要权限:

<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){ WifiManager.MulticastLock lock = wifi.createMulticastLock("mylock"); lock.acquire(); } 

3.你必须有一个支持接收组播的设备。 或者你可以按照他的工作,为根植设备。

看起来,在仿真器中没有适当的组播支持。

这是一个错误报告和相关的线程 。 正在被固定为froyo。

你需要做这样的事情

WifiManager wifi =(WifiManager)getSystemService(Context.WIFI_SERVICE); if(wifi!= null){MulticastLock mcLock = wifi.createMulticastLock(“mylock”); mcLock.acquire(); }

参考: http : //developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html

我读了所有不支持IGMP协议栈的2.1设备。

在不同的HTC,三星和摩托罗拉设备上,从2.1到3.2的所有Android版本都缺lessIGMP。

我阅读的链接http://www.programmingmobile.com/2012/01/multicast-and-android-big-headache.html