WiFi-Direct en JellyBean, WPA Suplicante desordenado

Así que hace un par de meses he empezado a desarrollar algunas aplicaciones WiFi-Direct. Hace unos días, he actualizado tanto de mi Galaxy Nexus a Jelly Bean (4.1.x) y probado mis aplicaciones, pero parece que hay algo desordenado de nuevo .. Ya era un dolor en el culo para obtener la funcionalidad principal conjunto En ICS, pero ahora ya no funciona.

Todo lo que obtengo es algo como esto en mi logcat:

/wpa_supplicant( 392): p2p0: P2P-PROV-DISC-PBC-REQ a2:0b:ba:xy:zz:xx p2p_dev_addr=a2:0b:ba:xy:zz:xx pri_dev_type=10-0050F204-x name='Android_e9f0' config_methods=0x188 dev_capab=0x27 group_capab=0x0 I/wpa_supplicant( 392): p2p0: P2P-DEVICE-FOUND a2:0b:ba:xy:zz:xx p2p_dev_addr=a2:0b:ba:xy:zz:xx pri_dev_type=10-0050F204-5 name='Android_e9f0' config_methods=0x188 dev_capab=0x27 group_capab=0x0 I/wpa_supplicant( 392): p2p0: P2P-GO-NEG-REQUEST a2:0b:ba:xx:zz:xy dev_passwd_id=4 I/wpa_supplicant( 392): p2p0: P2P-FIND-STOPPED I/wpa_supplicant( 392): p2p0: P2P-GO-NEG-FAILURE status=7 W/Netd ( 120): No subsystem found in netlink event D/NetlinkEvent( 120): Unexpected netlink message. type=0x11 I/wpa_supplicant( 392): p2p0: P2P-DEVICE-LOST p2p_dev_addr=a2:0b:ba:xx:zz:xy I/wpa_supplicant( 392): p2p0: P2P-DEVICE-FOUND a2:0b:ba:xx:zz:xy p2p_dev_addr=a2:0b:ba:xx:zz:xy pri_dev_type=10-0050F204-5 name='Android_e9f0' config_methods=0x188 dev_capab=0x27 group_capab=0x0 

El "diálogo de invitación" aparece correctamente en el segundo teléfono, y "a veces" (al azar) funciona, pero sólo en cada quinto intento o algo. Así que el logcat me dice, ya que no soy profesional con los códigos androide-interno, que la negociación simplemente falla, el dispositivo se pierde por un breve momento, y luego se descubre de nuevo, parece un poco desordenado.

Mi invitación es enviada así:

 public void onPeersAvailable(WifiP2pDeviceList peers) { if (isInvitationSent) return; for (WifiP2pDevice dev : peers.getDeviceList()) { WifiP2pConfig c = new WifiP2pConfig(); c.deviceAddress = dev.deviceAddress; c.wps.setup = WpsInfo.PBC; if (initiator && !isInvitationSent && WiFiSupport.compareMacAddressesInsensitive(MAC_ADDRESS, dev.deviceAddress)) { isInvitationSent = true; sendInvitation(c); } } } private void sendInvitation(final WifiP2pConfig config) { log("Sending invitation to " + config.deviceAddress); mWifiManager.connect(mChannel, config, new ActionListener() { @Override public void onSuccess() { log("Invitation sent!"); } @Override public void onFailure(int reason) { log("Invitation failed!"); Toast.makeText(getApplicationContext(), "Could not connect to peer, reason:"+reason, Toast.LENGTH_LONG).show(); if (!retryChannel) { log("Retrying to send invitation."); retryChannel = true; sendInvitation(config); } } }); } 

He leído mucho sobre wifi directo en android, y ha estado funcionando bien hasta que he actualizado los teléfonos a la mermelada. Alguien sabe, ¿qué podría estar mal? Si necesita más muestras de código o cualquier parte específica del código, solo dígame, ya que no sé qué podría ser confiable para esto.

Gracias por tu ayuda.

EDITAR:

Cambió el método WifiP2pConfig.wps.setup a "display", lo que resultó en el dispositivo # 1 mostrando un código PIN, el dispositivo # 2 apareciendo un diálogo con un campo de entrada – después de introducir el pin correcto esto es lo que logcat me dijo:

 08-31 15:13:28.241: I/wpa_supplicant(384): p2p0: P2P-GO-NEG-SUCCESS 08-31 15:13:28.241: I/wpa_supplicant(384): rfkill: Cannot open RFKILL control device 08-31 15:13:29.850: W/wpa_supplicant(384): p2p-p2p0-3: Could not connect to kernel driver 08-31 15:13:30.264: E/wpa_supplicant(384): Using interface p2p-p2p0-3 with hwaddr a2:0b:ba:x:y:z and ssid 'DIRECT-ps-Android_e9f0' 08-31 15:13:30.491: I/wpa_supplicant(384): p2p-p2p0-3: CTRL-EVENT-CONNECTED - Connection to a2:0b:ba:x:y:z completed (auth) [id=0 id_str=] 08-31 15:13:43.491: I/wpa_supplicant(384): p2p0: P2P-GROUP-FORMATION-FAILURE 08-31 15:13:43.491: I/wpa_supplicant(384): p2p0: P2P-GROUP-REMOVED p2p-p2p0-3 GO 08-31 15:13:43.491: W/wpa_supplicant(384): p2p-p2p0-3: Could not connect to kernel driver 08-31 15:13:44.061: E/wpa_supplicant(384): Failed to remove interface (ifidx=15) 08-31 15:13:44.178: W/Netd(120): No subsystem found in netlink event 08-31 15:13:44.178: D/NetlinkEvent(120): Unexpected netlink message. type=0x11 08-31 15:13:44.248: W/Netd(120): No subsystem found in netlink event 08-31 15:13:44.248: D/NetlinkEvent(120): Unexpected netlink message. type=0x11 08-31 15:13:44.280: I/wpa_supplicant(384): p2p0: P2P-DEVICE-LOST p2p_dev_addr=a2:0b:ba:x:y:z 08-31 15:13:46.155: I/wpa_supplicant(384): p2p0: P2P-DEVICE-FOUND a2:0b:ba:x:y:z p2p_dev_addr=a2:0b:ba:x:y:z pri_dev_type=10-0050F204-5 name='Android_755f' config_methods=0x188 dev_capab=0x27 group_capab=0x0 

Interesante sería: 08-31 15: 13: 43.491: W / wpa_supplicant (384): p2p-p2p0-3: No se pudo conectar con el controlador del kernel

Creo. ¿Parece un error en el propio wifi-direct-framework de Android para mí?

Para marcar esta pregunta como contestada, voy a copiar mi "solución" a este problema:

Parece que la formación de grupo sólo falla si usted está en otra red wifi, como en su casa wifi o tal .. por lo que Android no lo deshabilita – por lo tanto no se puede conectar a través de WiFi Direct.

Tuve que asegurarse de que los dispositivos no estaban en una red wifi.

Android actualizado Wi-Fi Direct API con Jelly Bean en el nivel de la API 16. Como ya sabes, la API principal se añadió por primera vez junto con ICS en el nivel 14 de la API. Aquí puedes encontrar las clases añadidas con respecto a Wi-Fi Direct,

 WifiP2pDnsSdServiceInfo WifiP2pDnsSdServiceRequest WifiP2pServiceInfo WifiP2pServiceRequest WifiP2pUpnpServiceInfo WifiP2pUpnpServiceRequest 

Algunas clases usan la clase WifiP2pManager como parámetro. Será mejor que eche un vistazo a ellos mismos:

http://developer.android.com/reference/android/net/wifi/p2p/nsd/package-summary.html

IMO su aplicación puede estar dañada, manipulada o lo que sea después de esta actualización en la API 16. Veo que ha creado su propio método para enviar invitación a otros pares, aunque esto no es realmente necesario. Los interlocutores obtienen la invitación automáticamente en Wi-Fi Direct. Por lo tanto, puede dejar que manejar el proceso de invitación en sí. Una vez más, sugiero que eche un vistazo aquí a menos que lo haya hecho antes.

  • Obtenga la dirección IP de la interfaz de red de Android
  • Wi-fi P2P. Informar a todos los compañeros disponibles de algún evento
  • Cómo encontrar el nombre de archivo de un archivo que se transfiere a través de wifi modo directo en Android?
  • El estado de WifiP2pDevice permanece en INVITADO después de la invitación directa de Wifi
  • Wi-Fi Direct Android
  • Pasos para transmitir de forma programada de Android a receptor de miracast
  • Android Wifip2p: ¿Por qué la información de grupo es nula después de conectarse con el propietario del grupo
  • Cómo obtener la dirección IP directa de WiFi de mi dispositivo
  • ¿Puede Windows Phone 8 y Android conectarse a través de Wifi Direct?
  • Conecta Raspberry con Android a través de servicios Wifi Direct (p2p)
  • Configurar una conexión Wifi-Direct entre Android y Raspberry Pi 3 Linux
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.