Ich versuche, den mHost der NsdServiceInfo als Parameter an NsdManager.DiscoveryListener.onServiceFound() übergeben, aber es ist null. Ich habe zwei Android-Geräte, wobei Gerät 1 der Server und Gerät 2 der Client ist. DieseHost ist Null in NsdServiceInfo von NsdManager.DiscoveryListener.onServiceFound
ist, wie ich den Server in dem Gerät 1
public void registerService(int port, InetAddress myIp) {
NsdServiceInfo serviceInfo = new NsdServiceInfo();
serviceInfo.setPort(port);
serviceInfo.setServiceName(this.serviceName);
serviceInfo.setServiceType(SERVICE_TYPE);
serviceInfo.setHost(myIp);
this.nsdManager.registerService(
serviceInfo, NsdManager.PROTOCOL_DNS_SD, registrationListener);
}
registrieren Und das ist, wie ich die Discovery initialisieren
public void initializeDiscoveryListener() {
discoveryListener = new NsdManager.DiscoveryListener() {
@Override
public void onServiceFound(NsdServiceInfo service) {
Log.d(TAG, "Service discovery success" + service);
if (!service.getServiceType().equals(SERVICE_TYPE)) {
Log.d(TAG, "Unknown Service Type: " + service.getServiceType());
} else if (service.getHost() == myIp) {
Log.d(TAG, "Same machine: " + service.getHost());
} else if (service.getServiceName().contains(serviceName)){
nsdManager.resolveService(service, resolveListener);
}
}
...
}
}
Aber service.getHost() kehrt null.
Irgendwelche Vorschläge?
Der Beispielcode in Android ist veraltet, sie sollten den Code nach Ihrer Codeänderung aktualisieren. : D – mxi1
Leider funktioniert der resolveService (...) überhaupt nicht. Beim Empfang von .onServiceDiscovered() wird immer ein ".local" (per NsdManager!) Zum Protokolltyp hinzugefügt, wobei jedoch ".local" den Befehl resolveService() verwirrt. UNBEKANNTER FEHLER ist das Ergebnis. Wenn das .local entfernt wird, werden keine Aufrufe von dem (immer neuen Resolvelistener) in dem ersten Aufruf empfangen, während der zweite Aufruf Fehler NsdManager.FAILURE_ALREADY_ACTIVE: // = 3 gibt. Da es sich jedoch bei jedem Aufruf um eine neue Instanz handelt, ist dies bedeutungslos, es sei denn, es gibt einen Singleton-Mechanismus, der hier lauert. Tiefst nervige Unreife. – carl
Ich kann hinzufügen, dass der Grund für das Ausführen mehrerer Auflösungsaufrufe einfach darin besteht, dass mehr als ein Dienst im lokalen Netzwerk erkannt wird. – carl