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.

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.

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"); } }); } 
  • ¿Existe un equivalente de Wi-Fi Direct / Wi-Fi P2P para Phonegap / Cordova?
  • Wi-Fi Directo y "normal" Wi-Fi - ¿Diferentes MAC?
  • 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?
  • ¿Cómo cambiar el nombre del dispositivo en WiFi p2p directo?
  • Wi-Fi Direct Android
  • Wi-fi P2P. Informar a todos los compañeros disponibles de algún evento
  • Cómo alcanzar la exhibición del wifi después de conectar por el wifi directo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.