Как получать многоадресные пакеты на 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, Он фиксируется для фройо.
Ответ 3
Вам нужно сделать что-то вроде этого
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
Ответ 4
Я прочитал все 2.1 устройства, не поддерживающие стек IGMP.
IGMP отсутствовал на разных устройствах HTC, Samsung и Motorola для всех версий Android от 2,1 до 3,2.
Ссылка, в которой я читаю http://www.programmingmobile.com/2012/01/multicast-and-android-big-headache.html