2012-08-31 19 views
5

así que hace un par de meses comencé a desarrollar algunas aplicaciones WiFi-Direct. Hace unos días, actualicé mi Galaxy Nexus a Jelly Bean (4.1.x) y probé mis aplicaciones, pero parece que hay algo mal de nuevo ... Ya era un fastidio para obtener la funcionalidad principal establecida en ICS, pero ahora ya no funciona.WiFi-Direct en JellyBean, WPA Supplicant arruinó

único que consigue 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" (aleatorio) aún funciona, pero sólo en cada quinto intento o algo. Así que el logcat me dice, como no soy profesional con los códigos android-intern, que la negociación simplemente falla, el dispositivo se pierde por un breve momento, y luego se descubre de nuevo, parece todo un poco desordenado.

Mi invitación se envía a cabo de esta manera:

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 un montón de Wi-Fi Direct en android, y ha estado trabajando bien hasta que actualicé los teléfonos a gominola .. alguien sabe, lo podría estar equivocado? Si necesita más ejemplos de código o alguna parte específica del código, solo dígame, ya que no sé qué podría ser confiable para esto.

Gracias por su ayuda.

EDIT:

cambió el método WifiP2pConfig.wps.setup la "pantalla", lo que resultó en el dispositivo nº 1 presentan un código PIN, el dispositivo nº 2 apareciendo un cuadro de diálogo con un campo de entrada - después de entrar en la correcta pin esto es lo que me dijo logcat:

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 al núcleo conductor

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

+1

Parece que la formación de grupos solo falla si estás en otra red wifi, como en el wifi de tu casa o tal ... por lo que Android no puede desactivarlo, por lo que no se puede conectar a través de WiFi Direct. – damian

+1

¿Encontró alguna solución para esto? – Zach

+0

Desarrollé en dos HTC One V (que no se pudo actualizar a Jelly Bean debido a restricciones de ram) y un HTC One X + (que tiene 4.1). En mi experiencia, el Uno V trabajó la mayor parte del tiempo donde el One X + fallaría más frecuentemente. – Chucky

Respuesta

0

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

parece que la formación de grupos sólo no si estás en otra red Wi-Fi, como en su casa o wifi tales .. por lo que Android no puede desactivarlo, por lo que no se puede conectar a través de WiFi Direct.

Tenía que asegurarme de que los dispositivos no estuvieran en una red wifi.

-1

API Wi-Fi Direct actualizada de Android con Jelly Bean en nivel de API 16. Como ya sabrá, la API central se agregó por primera vez junto con ICS en el nivel 14 de API. Aquí puede encontrar las clases adicionales relacionadas con Wi-Fi Direct,

WifiP2pDnsSdServiceInfo 
WifiP2pDnsSdServiceRequest 
WifiP2pServiceInfo 
WifiP2pServiceRequest 
WifiP2pUpnpServiceInfo 
WifiP2pUpnpServiceRequest 

Algunas clases aquí usan la clase WifiP2pManager como parámetro. Será mejor que echar un vistazo a usted mismo:

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

OMI su aplicación podría estar dañado, manipulado o lo que tan nunca después de esta actualización en el API 16. Veo que ha creado su propio método para enviar invitación a otros pares, aunque esto no es realmente necesario. Los compañeros reciben invitación automáticamente en Wi-Fi Direct. Por lo tanto, puede dejar que maneje el proceso de invitación en sí. Una vez más, le sugiero que eche un vistazo al here a menos que lo haya hecho antes.

+0

No, mi aplicación todavía funciona como un encanto ... Pero en la nueva API de JB está mejorando, algunos de los errores ya no se muestran. Especialmente aquellos relacionados con el conductor que fueron realmente difíciles de "atrapar". – damian

Cuestiones relacionadas