Skip to content Skip to sidebar Skip to footer

How To Receive Multicast Packets On Android

I'm trying to receive data from a multicast address, but the call to MulticastSocket.receive() blocks until a timeout takes place. I did some network sniffing and found out that m

Solution 1:

Lukas gives the best explanation and examples that I've seen on his blog: http://codeisland.org/2012/udp-multicast-on-android

In summary: 1. You need the permissions:

<uses-permissionandroid:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" /><uses-permissionandroid:name="android.permission.INTERNET"/><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>

2. You need a lock:

    WifiManager wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE);
    if (wifi != null){
        WifiManager.MulticastLock lock = wifi.createMulticastLock("mylock");
        lock.acquire();
    }

3. You have to have a device that supports receiving multicast. Or you can follow his work around for rooted devices.

Solution 2:

As it seems, there is no proper multicast support in the emulator.

Here's a bug report and related thread. It is being fixed for froyo.

Solution 3:

You need to do something like this

WifiManagerwifi= (WifiManager)getSystemService( Context.WIFI_SERVICE );
if(wifi != null)
{
    MulticastLockmcLock= wifi.createMulticastLock("mylock");
    mcLock.acquire();
}

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

Solution 4:

I read all 2.1 devices not supporting IGMP stack.

IGMP was missing on different HTC, Samsung, and Motorola devices of all android version from 2.1 up to 3.2.

Link in which i read http://www.programmingmobile.com/2012/01/multicast-and-android-big-headache.html

Post a Comment for "How To Receive Multicast Packets On Android"