Sto cercando di ottenere il mHost di NsdServiceInfo passato come parametro a NsdManager.DiscoveryListener.onServiceFound() ma è nullo. Ho due dispositivi Android in cui il dispositivo 1 è il server e il dispositivo 2 è il client.L'host è nullo in NsdServiceInfo di NsdManager.DiscoveryListener.onServiceFound
Questo è come mi registrare il server nel dispositivo 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);
}
e questo è come mi inizializzare la DiscoveryListener
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);
}
}
...
}
}
Ma service.getHost() restituisce null.
Qualche suggerimento?
Il codice di esempio in Android non è aggiornato, è necessario aggiornare il codice dopo la modifica del codice. : D – mxi1
Sfortunatamente, resolveService (...) non funziona affatto. Quando si riceve .onServiceDiscovered(), un ".local" sarà sempre aggiunto (da NsdManager!) Al tipo di protocollo, tuttavia questo ".local" confonde il resolveService(). ERRORE SCONOSCIUTO è il risultato. Se viene rimosso il .local, non viene ricevuta alcuna richiamata dal (sempre nuovo Resolvelistener) nella prima chiamata, mentre la seconda chiamata restituisce l'errore NsdManager.FAILURE_ALREADY_ACTIVE: // = 3. Ma dal momento che è una nuova istanza creata su ogni chiamata, questo non ha senso, a meno che non ci sia un meccanismo Singleton in agguato qui. Immaturità profondamente fastidiosa. – carl
Posso aggiungere che il motivo per cui si eseguono più chiamate di risoluzione è semplicemente il rilevamento di più di un servizio sulla rete locale. – carl