Как получать многоадресные пакеты на Android

Я пытаюсь получить данные из адреса многоадресной рассылки, но вызов в MulticastSocket.receive() блокируется до тех пор, пока не произойдет тайм-аут. Я немного понюхал сеть и узнал, что мое устройство (и эмулятор) никогда не отправляет запрос MulticastSocket.joinGroup. Я попробовал запустить тот же Java-код с моего ПК как автономное приложение, и он работал хорошо. Может быть, платформа Android блокирует запросы на соединение IGMP? Кто-нибудь преуспел в Multicast на Android раньше?

Мой файл манифеста содержит следующее разрешение:

Я запускаю свое приложение на 2.1 (оба эмулятора и устройства).

Любые идеи кто-нибудь?

Спасибо,

Ответ 1

Лукас дает лучшее объяснение и примеры, которые я видел в своем блоге: 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"/>


2. Вам нужна блокировка:

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


3. У вас должно быть устройство, поддерживающее прием многоадресной рассылки. Или вы можете следить за его работой для укоренившихся устройств.

Ответ 2

Как кажется, в эмуляторе нет надлежащей поддержки многоадресной рассылки.

Вот ошибка отчет и связанная с ней thread, Он фиксируется для фройо.