我有同样的问题,并想出了由@braden,@ user707606和Chainfire在这个Link中主要发布的帖子组合的解决方案。
发布在链接是好的,但并没有真正提供任何代码示例,但在这里。首先你需要获取组播锁,这是一些Android设备所必需的,在大多数情况下都没有尝试,但是在其他一些帖子中提到过,所以我将它包含在我的代码中。
权限是必需的,所以首先将权限添加到您的Manifest文件中。
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
然后第二步是在你的方法中获取组播锁。
/* Acquire MultiCast Lock */
WifiManager wifi = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
WifiManager.MulticastLock multicastLock = wifi.createMulticastLock("multicastLock");
multicastLock.setReferenceCounted(true);
multicastLock.acquire();
,然后找到你的无线网络接口
/**
* Finds Network Interface of Wifi Ethernet.
*
* @return
*/
public static NetworkInterface findWifiNetworkInterface() {
Enumeration<NetworkInterface> enumeration = null;
try {
enumeration = NetworkInterface.getNetworkInterfaces();
} catch (SocketException e) {
e.printStackTrace();
}
NetworkInterface wlan0 = null;
while (enumeration.hasMoreElements()) {
wlan0 = enumeration.nextElement();
if (wlan0.getName().equals("wlan0")) {
return wlan0;
}
}
return null;
}
后来,创建多播套接字有一个可用的端口,并设置您的WiFi NetworkInterface的。
MulticastSocket multicastSocket = new MulticastSocket();
/* Set NetworkInterface of MultiCast Socket */
NetworkInterface wifiNetworkInterface = findWifiNetworkInterface();
if (wifiNetworkInterface != null) multicastSocket.setNetworkInterface(wifiNetworkInterface);
然后您的其余实施保持不变。一旦你完成了组播锁定,建议释放它。
我很想听听你是否设法解决这个问题。我理解它的方式是,你需要一个多播锁,以便让多播工作。赢得一个的唯一途径是通过wifi管理者。不幸的是,将该设备设置为热点时,似乎在eth0接口上创建了组播锁,而实际的通信发生在wl0.1上。就我所知的这个问题而言,在正确的轨道上。 – Petrus
同样在这里....... – zaf
这里几乎是一样的东西。这两种设备都在播出,但他们不能“看到”彼此。 –