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:
- WiFi-Direct en JellyBean, WPA Suplicante desordenado
- ¿Puedo conectar Windows PC a un teléfono Android con WiFi Direct
- El estado de WifiP2pDevice permanece en INVITADO después de la invitación directa de Wifi
- Conecte 2 o más clientes de Android directamente
- Transmisión por Wi-Fi Direct
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?
- Wifi-Direct siempre se desconecta después de treinta minutos
- ¿Puede Windows Phone 8 y Android conectarse a través de Wifi Direct?
- Android Wifip2p: ¿Por qué la información de grupo es nula después de conectarse con el propietario del grupo
- cómo encontrar la dirección del dispositivo cliente wifip2p?
- WiFi Direct en Android no funciona correctamente
- Pasos para transmitir de forma programada de Android a receptor de miracast
- ¿Cómo obtengo un descubrimiento de servicio Wi-Fi punto a punto para trabajar?
- Conecta el iPhone a Android Wifi Direct soft AP
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.
- ¿Qué versión de Apache HTTP Client está incluida en Android 1.6?
- Problemas al importar proyectos en Android Studio con respecto a ActionBarSherlock