Es scheint, Multicast-Empfang funktioniert nicht auf einigen Android-Geräten. Ich kann Multicast nicht mit 4 von 13 Testgeräten empfangen. Auf diesen vier Geräten scheint die App die IGMP-Anfrage nicht an die Multicast-Gruppe zu senden.Warum funktioniert der Multicast-Empfang auf einigen Android-Geräten nicht?
Der Code der Multicast zu empfangen sieht so aus:
WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
WifiManager.WifiLock wifiLock = wifiManager.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, TAG);
WifiManager.MulticastLock multicastLock = wifiManager.createMulticastLock(TAG);
multicastLock.setReferenceCounted(true);
wifiLock.acquire();
multicastLock.acquire();
try {
MulticastSocket socket = new MulticastSocket(32123);
InetAddress group = InetAddress.getByName("224.1.2.3");
socket.joinGroup(group);
DatagramPacket packet;
byte[] buf = new byte[256];
packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
socket.leaveGroup(group);
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
multicastLock.release();
wifiLock.release();
Die App verfügt über die folgenden Berechtigungen:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
das Problem zu demonstrieren ich auf ein kleines Testprojekt mit dem obigen Code erstellt GitHub: MulticastTest.
Gibt es ein Problem mit meinem Code? Vermisse ich eine Erlaubnis?
EDIT 1: Dieses Problem scheint sich nicht auf eine bestimmte Android-Version beziehen. Ich kann das Verhalten auf Android 4.x, 5.x und 6.x reproduzieren.
EDIT 2: Es gibt eine verwandte question.