我有同樣的問題,並想出了由@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
這裏幾乎是一樣的東西。這兩種設備都在播出,但他們不能「看到」彼此。 –