Android NSD no descubre todos los servicios

Estoy intentando ejecutar una aplicación usando Android Native Service Discovery, pero a veces cuando ejecuto la aplicación, no descubro todos los servicios de mi red. Estoy ejecutando el código de https://github.com/joeluchoa/nsd utilizando cuatro nexo Galaxia y la mayoría de las veces cada uno de ellos descubre un número diferente de servicios al mismo tiempo.

Básicamente, ejecuto un servicio con un ServerSocket:

ServerSocket server = new ServerSocket(0); Log.i(TAG, "IP " + server.getInetAddress() + ", running on port " + server.getLocalPort()); Intent intent = new Intent(MySocket.this, MyPresence.class); intent.putExtra("PORT", server.getLocalPort()); startService(intent); 

Entonces lo publico usando el método registerService de NsdManager:

 NsdServiceInfo serviceInfo = new NsdServiceInfo(); serviceInfo.setServiceName(Build.SERIAL + "-" + new Date().getTime()); serviceInfo.setServiceType(SERVICE_TYPE); serviceInfo.setPort(port); mNsdManager.registerService(serviceInfo, NsdManager.PROTOCOL_DNS_SD, mRegistrationListener); 

Para descubrir los servicios utilizo el método discoverServices de NsdManager:

 mNsdManager.discoverServices(SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD, mDiscoveryListener); 

Con mDiscoveryListener de la siguiente manera:

 mDiscoveryListener = new NsdManager.DiscoveryListener() { @Override public void onDiscoveryStarted(String regType) { Log.d(TAG, "Service discovery started"); } @Override public void onServiceFound(NsdServiceInfo service) { Log.d(TAG, "Service discovery success"); Log.d(TAG, String.format("%s %s %s %d", service.getServiceName(), service.getServiceType(), service.getHost(), service.getPort())); if (!service.getServiceType().contains(SERVICE_TYPE)) { Log.d(TAG, "Unknown Service Type: " + service.getServiceType()); } else if (service.getServiceName().equals(mServiceName)) { Log.d(TAG, "Same machine: " + mServiceName); } else { mNsdManager.resolveService(service, mResolveListener); } } @Override public void onServiceLost(NsdServiceInfo service) { Log.e(TAG, "service lost" + service); } @Override public void onDiscoveryStopped(String serviceType) { Log.i(TAG, serviceType + " Discovery stopped: " + serviceType); } @Override public void onStartDiscoveryFailed(String serviceType, int errorCode) { Log.e(TAG, serviceType + " Discovery failed: Error code:" + errorCode); mNsdManager.stopServiceDiscovery(this); } @Override public void onStopDiscoveryFailed(String serviceType, int errorCode) { Log.e(TAG, serviceType + " Discovery failed: Error code:" + errorCode); mNsdManager.stopServiceDiscovery(this); } }; 

¿Estoy haciendo algo mal? ¿Alguien sabe una solución o una solución para esto?

Tuve el mismo problema, reinstalar ayudó. Tratar de usar:)

Me temo que todavía hay bugs en la implementación que hacen que pierda servicios. He hecho un par de días de pruebas con varios dispositivos Android y una MacBook, y simplemente no funciona todo el tiempo. Documenté mis descubrimientos sobre un informe de error en el rastreador de errores de Android: https://code.google.com/p/android/issues/detail?id=178080

Tiendo a pensar que toda la implementación de NSD en Android debe ser un poco escamosa. También tengo una actividad simple para demostrar el ciclo de vida (no se abren Sockets), ya veces funciona, ya veces no funciona. Simplemente no lo entiendo. Aquí está la Actividad si alguien tiene alguna idea:

https://github.com/mholzel/Dump/blob/master/NetworkServiceDiscoveryViaWifi.java

Por otro lado, Wifi Direct NSD basado parece ser muy confiable para mí:

https://github.com/mholzel/Dump/blob/master/NetworkServiceDiscoveryViaWifiDirect.java

Tenga en cuenta que ninguna de estas actividades tiene recursos, por lo que sólo tiene que agregar las actividades a su manifiesto con los permisos adecuados.

  • ¿Cómo cambiar el nombre del dispositivo en WiFi p2p directo?
  • Wi-Fi Direct Android
  • Descubrimiento del servicio directo Wifi de Android
  • ¿Cómo puedo manejar múltiples clientes conectados a un servidor mediante sockets?
  • Wi-fi P2P. Informar a todos los compañeros disponibles de algún evento
  • Detalles del dispositivo WiFi Android WiFi
  • Conecta Raspberry con Android a través de servicios Wifi Direct (p2p)
  • Desconectar de un grupo directo wifi
  • Obtenga la dirección IP de la interfaz de red de Android
  • Android WifiP2p - Se notifica cuando un dispositivo descubierto no está disponible
  • Red inalámbrica Wi-Fi de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.