Android: jmdns no descubre dispositivos

Estoy tratando de implementar una clase para descubrir servicios en la red. He intentado trabajar conNSD de Android y descubre que los servicios están bien, pero solo admite los niveles de API 16 y superiores, y parece que no puedo recuperar el campo txtRecord dentro de la información del servicio (por alguna razón, devuelve nulo). Resultaes un problema conocido ...

Así que ahora estoy tratando de trabajar conjmDNS, que no parece encontrar servicios en absoluto. aquí está mi clase (estoy trabajando con el marco de AndroidAnnotations) MDnsHelper:

@EBean
public class MDnsHelper implements ServiceListener {

public static final String SERVICE_TYPE = "_http._tcp.local";

Activity activity;
private JmDNS jmdns;
private MulticastLock multicastLock;
WifiManager wm;
InetAddress bindingAddress;
boolean isDiscovering;

public void init(Activity activity) {
    this.activity = activity;
    isDiscovering = false;
    wm = (WifiManager) activity.getSystemService(Context.WIFI_SERVICE);
    multicastLock = wm.createMulticastLock(activity.getPackageName());
    multicastLock.setReferenceCounted(false);
}

@Background
public void startDiscovery() {
    if (isDiscovering)
        return;
    System.out.println("starting...");
    multicastLock.acquire();
    try {
        System.out.println("creating jmdns");
        jmdns = JmDNS.create();
        System.out.println("jmdns created");
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (jmdns != null) {
            jmdns.addServiceListener(SERVICE_TYPE, MDnsHelper.this);
            isDiscovering = true;
            System.out.println("discovering services of type: " + SERVICE_TYPE);
        }
    }
}

@Background
public void stopDiscovery() {
    if (!isDiscovering || jmdns == null)
        return;
    System.out.println("stopping...");
    multicastLock.release();
    jmdns.removeServiceListener(SERVICE_TYPE, MDnsHelper.this);
    System.out.println("listener for " + SERVICE_TYPE + " removed");
    try {
        jmdns.close();
        isDiscovering = false;
        System.out.println("jmdns closed");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

@Override
public void serviceAdded(ServiceEvent service) {
    System.out.println("found: " + service.getInfo().toString());
}

@Override
public void serviceRemoved(ServiceEvent service) {
    System.out.println("lost: " + service.getInfo().toString());
}

@Override
public void serviceResolved(ServiceEvent service) {
    System.out.println("resolved: " + service.getInfo().toString());
}
}

Y en mi aplicación llamo:

init(getActivity());

Y entoncesstartDiscovery(); para comenzar a escanear ystopDiscovery(); para dejar de escanear.

Y, por supuesto, le di a la aplicación los permisos requeridos en el manifiesto ... ¿Qué me estoy perdiendo aquí? Si necesita que proporcione código / información adicional, solo pregunte. ¡¡Gracias!!

Respuestas a la pregunta(1)

Su respuesta a la pregunta