Android - jmdns erkennt keine Geräte

Ich versuche, eine Klasse zu implementieren, um Dienste im Netzwerk zu ermitteln. Ich habe versucht, mit zu arbeitenAndroid NSD und es erkennt die Dienste in Ordnung, aber es unterstützt nur API-Level 16 und höher, und ich kann das txtRecord-Feld in den Dienstinformationen nicht abrufen (es gibt aus irgendeinem Grund null zurück). Es stellt sich herausEs ist ein bekanntes Problem ...

Also versuche ich jetzt mit zu arbeitenjmDNS, der anscheinend überhaupt keine Dienste findet. Hier ist meine Klasse (ich arbeite mit dem AndroidAnnotations Framework) 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());
}
}

Und in meiner App rufe ich an:

init(getActivity());

Und dannstartDiscovery(); zu scannen beginnen undstopDiscovery(); um den Scanvorgang zu beenden.

Und natürlich habe ich der App die erforderlichen Berechtigungen im Manifest gegeben ... Was fehle ich hier? Wenn Sie zusätzlichen Code / zusätzliche Informationen benötigen, fragen Sie einfach. Vielen Dank!!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage