Ho avuto lo stesso problema e si avvicinò con una soluzione dalla combinazione di @braden, @ user707606 e principalmente palo da Chainfire in questo Link.
Share link è bello, ma in realtà non offre alcun esempi di codice, ma qui è. Per prima cosa devi acquisire Multicast Lock, questo è necessario per alcuni dispositivi Android, non è stato provato nella maggior parte di essi, ma è stato menzionato in altri post, quindi l'ho incluso nel mio codice. è richiesto
permesso, quindi prima, aggiungere i permessi nel file manifesto.
<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" />
Quindi il secondo passaggio consiste nell'acquisizione del blocco multicast nel metodo.
/* Acquire MultiCast Lock */
WifiManager wifi = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
WifiManager.MulticastLock multicastLock = wifi.createMulticastLock("multicastLock");
multicastLock.setReferenceCounted(true);
multicastLock.acquire();
E poi, trova le informazioni di interfaccia di rete Wifi
/**
* 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;
}
In seguito, creare un socket multicast con una porta e impostare il Wifi NetworkInterface.
MulticastSocket multicastSocket = new MulticastSocket();
/* Set NetworkInterface of MultiCast Socket */
NetworkInterface wifiNetworkInterface = findWifiNetworkInterface();
if (wifiNetworkInterface != null) multicastSocket.setNetworkInterface(wifiNetworkInterface);
Quindi il resto della vostra implementazione rimane lo stesso. E una volta che hai finito con Blocco Multicast, è consigliabile rilasciarlo.
Mi piacerebbe sapere se siete riusciti a risolvere questo problema. Il modo in cui ho capito è che hai bisogno di un multicastlock per far funzionare il multicast. E l'unico modo per acquisirne uno è il wifimanager.Sfortunatamente, con il dispositivo impostato come hotspot, sembra che il blocco multicast sia stato creato sull'interfaccia eth0, mentre la comunicazione effettiva sta accadendo a wl0.1 Questo è quanto ho avuto con questo problema, non sono sicuro che io sia " m sulla strada giusta. – Petrus
Lo stesso qui ....... – zaf
Praticamente la stessa cosa qui. Entrambi i dispositivi stanno trasmettendo, ma non possono "vedersi" a vicenda. –