How to receive Multicast packets on Android

后端 未结 4 1773
囚心锁ツ
囚心锁ツ 2021-01-04 19:25

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 ou

相关标签:
4条回答
  • 2021-01-04 19:38

    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

    0 讨论(0)
  • 2021-01-04 19:39

    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.

    0 讨论(0)
  • 2021-01-04 19:45

    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.

    0 讨论(0)
  • 2021-01-04 20:02

    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

    0 讨论(0)
提交回复
热议问题