Eyal
Eyal

Reputation: 141

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 my device (and the emulator) never send a MulticastSocket.joinGroup request. I tried running the same Java code from my PC as a standalone application and it worked well. Could it be that the Android platform blocks IGMP join requests? Has anyone succeeded with Multicast on Android before?

My manifest file contains the following permission:

I am running my application on 2.1 (Both emulator & device).

Any ideas anyone?

Thanks,

Upvotes: 12

Views: 16871

Answers (4)

Divyanshu
Divyanshu

Reputation: 31

You need to do something like this

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

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

Upvotes: 3

Paul Gregoire
Paul Gregoire

Reputation: 9793

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-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"/>


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.

Upvotes: 9

SoftwareGuy
SoftwareGuy

Reputation: 1479

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

Upvotes: 0

Milan
Milan

Reputation: 15849

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.

Upvotes: 4

Related Questions