【发布时间】:2016-09-14 13:50:33
【问题描述】:
在某些 Android 设备上似乎无法接收多播。 13 台测试设备中有 4 台无法接收多播。在这 4 台设备上,应用似乎没有发送加入多播组的 IGMP 请求。
接收多播的代码如下所示:
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();
该应用具有以下权限:
<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"/>
为了演示这个问题,我在 GitHub 上使用上述代码创建了一个小测试项目:MulticastTest。
我的代码有问题吗?我错过了一个权限吗?
编辑 1:此问题似乎与特定的 Android 版本无关。我可以在 Android 4.x、5.x 和 6.x 上重现该行为。
EDIT 2:有一个相关的question。
【问题讨论】:
-
这 4 台受影响的设备是什么?
标签: android networking multicast android-networking igmp