que he tenido el mismo problema y se acercó con una solución mediante la combinación de @braden, @ user707606 y principalmente la publicación de Chainfire en este Link.
Publicar en el enlace es bueno, pero realmente no ofrece ningún ejemplo de código, pero aquí está. Primero necesita Adquirir bloqueo de multidifusión, esto es necesario para algunos dispositivos Android, no lo intenté en la mayoría de ellos, pero se mencionó en algunas otras publicaciones, así que lo he incluido en mi código.
Se requiere permiso, así que primero, agregue los permisos en su archivo de Manifiesto.
<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" />
Luego, el segundo paso es adquirir el bloqueo de multidifusión en su método.
/* Acquire MultiCast Lock */
WifiManager wifi = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
WifiManager.MulticastLock multicastLock = wifi.createMulticastLock("multicastLock");
multicastLock.setReferenceCounted(true);
multicastLock.acquire();
Y entonces, encontrar su interfaz de red 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;
}
Más tarde, crear un socket de multidifusión con un puerto disponible y establecer sus Wifi NetworkInterface.
MulticastSocket multicastSocket = new MulticastSocket();
/* Set NetworkInterface of MultiCast Socket */
NetworkInterface wifiNetworkInterface = findWifiNetworkInterface();
if (wifiNetworkInterface != null) multicastSocket.setNetworkInterface(wifiNetworkInterface);
Luego, el resto de su implementación sigue siendo la misma. Y una vez que haya terminado con bloqueo de multidifusión, se recomienda liberarlo.
Me encantaría saber si ha logrado resolver este problema. La forma en que lo entiendo es que necesita un multicastlock para que multicast funcione. Y la única forma de adquirir uno es a través de la wifimanager.Desafortunadamente, con el dispositivo configurado como un punto de acceso público, parece que el bloqueo de multidifusión se crea en la interfaz eth0, mientras que la comunicación real está sucediendo en wl0.1. Esto es lo más lejos que tengo con este problema, no estoy seguro de si ' m en el camino correcto. – Petrus
Lo mismo aquí ....... – zaf
Más o menos lo mismo aquí. Ambos dispositivos están transmitiendo, pero no pueden "verse" entre ellos. –