WiFiDirect discoverServices sigue fallando con error 3 (NO_SERVICE_REQUESTS)
Estoy utilizando WiFi P2P para el descubrimiento del servicio de red , y estoy siguiendo las instrucciones descritas en la guía del desarrollador. Aquí está el código relevante en mi clase de servicio:
public void onCreate() { manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE); channel = manager.initialize(this, getMainLooper(), null); registerP2pService(); lookForServices(); } private void registerP2pService() { WifiP2pDnsSdServiceInfo serviceInfo = WifiP2pDnsSdServiceInfo.newInstance("_service.name", "_presence._tcp", new HashMap<String, String>()); manager.addLocalService(channel, serviceInfo, new WifiP2pManager.ActionListener() { @Override public void onSuccess() { Log.i("tag", "REGISTERED SERVICE"); } @Override public void onFailure(int arg0) { Log.e("tag", "FAILED to register service"); } }); } private void setServiceListeners() { WifiP2pDnsSdServiceRequest serviceRequest = WifiP2pDnsSdServiceRequest.newInstance(); manager.addServiceRequest(channel, serviceRequest, new WifiP2pManager.ActionListener() { @Override public void onSuccess() { Log.d("SCOPE", "Added a service request."); discoverServices(); } @Override public void onFailure(int code) { Log.e("tag", "Error adding service request."); } }); } public void discoverServices() { manager.discoverServices(channel, new WifiP2pManager.ActionListener() { @Override public void onSuccess() { Log.d("tag", "Service discovery was initiated"); } @Override public void onFailure(int code) { // This is where it keeps failing with error code 3 (NO_SERVICE_REQUESTS) Log.d("SCOPE", "Service discovery failure code " + code); } }); }
La primera vez que ejecuto mi servicio después de reiniciar el teléfono, el descubrimiento del servicio se inicia muy bien, pero si cancelo el servicio deteniéndolo en la página de configuración de la aplicación y lo vuelvo a abrir, siempre falla con el código de error 3. Si reinicio Mi teléfono y ejecutar la aplicación de nuevo funciona bien. Estoy confundido porque explico explícitamente a discoverServices cuando la solicitud de servicio se ha agregado correctamente.
- Android 4.2.2 Wifi-Direct adhoc network - acceder a métodos ocultos android para establecer el SSID y contraseña?
- ¿Cómo ser notificado cuando un compañero ya no está disponible en la gama Wi-Fi Direct?
- Cómo detener el descubrimiento de pares en WifiDirect Android
- El estado de WifiP2pDevice permanece en INVITADO después de la invitación directa de Wifi
- ¿Es posible conectar dos o más grupos WiFi Direct?
Mi corazonada es que puede ser debido a algún código que no está relacionado con el descubrimiento de servicio porque el código de descubrimiento de servicio parece muy sencillo, pero si ves algo malo con lo que he publicado, avísame. Estoy cogiendo paja aquí.
Estoy ejecutando esto en un Nexus 5 con Android 4.4.2.
- ¿Es posible la multidifusión con Wi-Fi Direct?
- ¿Cómo obtengo un descubrimiento de servicio Wi-Fi punto a punto para trabajar?
- ¿Por qué Android Wi-Fi Direct solo devuelve un servicio a la vez con discoverServices?
- ¿Puedo cambiar el propietario del grupo en un grupo persistente en Wi-Fi Direct?
- Wifi-Direct siempre se desconecta después de treinta minutos
- Conecta Raspberry con Android a través de servicios Wifi Direct (p2p)
- El descubrimiento del servicio P2P Wifi funciona intermitentemente
- Cómo aceptar automáticamente solicitudes de conexión Wi-Fi directamente en Android
Estoy viendo este mismo problema en una segunda generación de Nexus 7. Funciona bien la primera vez, los intentos posteriores de error. Específicamente, el addServiceRequest
acción addServiceRequest
informa de éxito, pero luego discoverServices
informa NO_SERVICE_REQUESTS.
(Teardown removeLocalService
y removeServiceRequest removeLocalService
éxito antes de salir de la aplicación después del uso removeLocalService
inicial.)
Si bien no es una respuesta ideal, tocando wifi apagado y luego de nuevo aparece para restablecer lo que está atascado. Eso se puede hacer mediante programación.
WifiDirect / NSD en Android ha sido una espina en mi lado durante el último par de semanas.
Pasé la mitad de la semana pasada tratando de averiguar por qué mis llamadas de descubrimiento de pares fallarían sin ninguna coherencia con NO_SERVICE_REQUESTS y finalmente encontré una solución que funciona bastante bien. Parece ser un error en el sistema operativo, y por suerte la buena gente de P2Feed descubrió una solución :
if (code == WifiP2pManager.NO_SERVICE_REQUESTS) { // initiate a stop on service discovery manager.stopPeerDiscovery(channel, new WifiP2pManager.ActionListener() { @Override public void onSuccess() { // initiate clearing of the all service requests manager.clearServiceRequests(channel, new WifiP2pManager.ActionListener() { @Override public void onSuccess() { // reset the service listeners, service requests, and discovery setServiceListeners(); } @Override public void onFailure(int i) { Log.d(TAG, "FAILED to clear service requests "); } }); } @Override public void onFailure(int i) { Log.d(TAG, "FAILED to stop discovery"); } }); }
- Android EditText onClick Listener definido en Layout falla con Obscure Exception
- Administrador SDK Host desconocido dl-ssl.google.com