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:
- ¿Qué es diferente de NSD y WifiP2pManager?
- Configurar una conexión Wifi-Direct entre Android y Raspberry Pi 3 Linux
- WiFi Direct en Android no funciona correctamente
- ¿Puedo conectar Windows PC a un teléfono Android con WiFi Direct
- Conecta Raspberry con Android a través de servicios Wifi Direct (p2p)
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?
- cómo encontrar la dirección del dispositivo cliente wifip2p?
- El estado de WifiP2pDevice permanece en INVITADO después de la invitación directa de Wifi
- Descubrimiento del servicio directo Wifi de Android
- IOS 7 Multipeer Connectivity es compatible con Android Wi-Fi Direct?
- Android Wifip2p: ¿Por qué la información de grupo es nula después de conectarse con el propietario del grupo
- Obtenga la dirección IP de la interfaz de red de Android
- Cómo alcanzar la exhibición del wifi después de conectar por el wifi directo
- Transferencia de datos entre dispositivos Android mediante wifi directo?
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