miałem ten sam problem i wymyślił rozwiązanie przez połączenie @braden, @ user707606 i głównie post przez Chainfire w tym Link.
Opublikuj w linku jest ładne, ale tak naprawdę nie oferuje żadnych próbek kodu, ale tutaj jest. Najpierw musisz zdobyć blokadę multiemisji, która jest potrzebna na niektórych urządzeniach z Androidem, nie próbowała większości z nich, ale została wymieniona w kilku innych postach, więc umieściłem ją w moim kodzie.
Pozwolenie jest wymagane, więc najpierw dodaj uprawnienia do pliku manifestu.
<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" />
Następnie drugim krokiem jest uzyskanie blokady multiemisji w swojej metodzie.
/* Acquire MultiCast Lock */
WifiManager wifi = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
WifiManager.MulticastLock multicastLock = wifi.createMulticastLock("multicastLock");
multicastLock.setReferenceCounted(true);
multicastLock.acquire();
A potem, znajdź swój Wifi sieciowa
/**
* 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;
}
Później utworzenia gniazda Multicast z wolnego portu i ustawić Wifi NetworkInterface.
MulticastSocket multicastSocket = new MulticastSocket();
/* Set NetworkInterface of MultiCast Socket */
NetworkInterface wifiNetworkInterface = findWifiNetworkInterface();
if (wifiNetworkInterface != null) multicastSocket.setNetworkInterface(wifiNetworkInterface);
Następnie pozostała część implementacji pozostanie niezmieniona. A kiedy skończysz z funkcją Multicast Lock, zalecane jest jej zwolnienie.
Chciałbym usłyszeć, jeśli udało Ci się rozwiązać ten problem. Rozumiem, że potrzebujesz multicastlock, aby multicast zadziałał. A jedynym sposobem na zdobycie jednego jest jednak Wifimanager.Niestety z urządzeniem skonfigurowanym jako hotspot wydaje się, że blokada multicastu jest tworzona na interfejsie eth0, podczas gdy faktyczna komunikacja odbywa się w wl0.1 To jest tak daleko, jak mam z tym problemem, nie jestem pewien, czy ". m na właściwym torze. – Petrus
To samo tutaj ....... – zaf
Niemal to samo. Oba urządzenia nadają, ale nie mogą "widzieć" siebie nawzajem. –