2012-08-31 11 views
5

così un paio di mesi fa ho iniziato a sviluppare alcune applicazioni WiFi-Direct. Qualche giorno fa, ho aggiornato entrambi il mio Galaxy Nexus a Jelly Bean (4.1.x) e testato le mie applicazioni, ma sembra che ci sia qualcosa di incasinato di nuovo .. Era già un rompicapo avere il set di funzionalità principali su ICS, ma ora non funziona più.WiFi-Direct su JellyBean, Supplicant WPA incasinato

tutto quello che ottiene è qualcosa di simile nella mia 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 

La "finestra di dialogo invito" si solleva correttamente al secondo telefono, e "qualche volta" (casuale) funziona ancora, ma solo in ogni quinto tentativo o qualcosa. Quindi il logcat mi dice, dato che non sono un professionista con i codici di Android-intern, che la negoziazione semplicemente fallisce, il dispositivo si perde per un breve istante e poi viene nuovamente scoperto, sembra tutto un po 'incasinato.

Il mio invito è inviato in questo modo:

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); 
      } 
     } 
    }); 
} 

Ho letto molto su WiFi Direct su Android, ed è lavorato bene fino a quando ho aggiornato i telefoni per jelly bean .. qualcuno sa, che cosa potrebbe essere sbagliato? Se hai bisogno di più esempi di codice o di una parte specifica del codice, dimmelo, dato che non so cosa possa essere affidabile per questo.

Grazie per il vostro aiuto.

EDIT:

cambiato il metodo WifiP2pConfig.wps.setup al "display", che ha portato nel dispositivo # 1 visualizzazione di un codice PIN, dispositivo # 2 spuntando una finestra di dialogo con un campo di inserimento - dopo aver inserito la corretta pin questo è ciò che logcat mi ha detto:

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 

interessante potrebbe essere: 08-31 15: 13: 43,491: W/wpa_supplicant (384): p2p-p2p0-3: Impossibile connettersi al kernel driver di

Penso. Sembra un bug nella struttura wifi-direct di Android per me?

+1

Sembra che la formazione di un gruppo non abbia esito positivo se ci si trova in un'altra rete wifi, come nel wifi di casa o in una di queste .. quindi Android non riesce a disabilitarlo, quindi non riesce a connettersi tramite WiFi Direct. – damian

+1

Hai trovato qualche soluzione per questo? – Zach

+0

Mi sono sviluppato su due HTC One V (che non potevano essere aggiornati a Jelly Bean a causa delle restrizioni della ram) e su HTC One X + (che ha 4.1). Nella mia esperienza, One V ha funzionato la maggior parte del tempo in cui il One X + falliva più frequentemente. – Chucky

risposta

0

Per contrassegnare questa domanda come risposta, mi limiterò a copiare il mio "soluzione" a questo problema:

Sembra come formazione di gruppo non riesce solo se si è in un'altra rete Wi-Fi, come nella vostra casa o wifi, quali .. così Android non riesce a disabilitarlo, quindi non riesce a connettersi tramite WiFi Direct.

Ho dovuto verificare che i dispositivi non si trovassero in una rete wifi.

-1

API Wi-Fi Direct Android aggiornata con Jelly Bean in livello API 16. Come già sapete, l'API principale è stata aggiunta per la prima volta insieme a ICS in livello API 14. Qui è possibile trovare le classi aggiunte relative a Wi-Fi Direct,

WifiP2pDnsSdServiceInfo 
WifiP2pDnsSdServiceRequest 
WifiP2pServiceInfo 
WifiP2pServiceRequest 
WifiP2pUpnpServiceInfo 
WifiP2pUpnpServiceRequest 

Alcune classi qui usano WifiP2pManager classe come parametro. È meglio dare un'occhiata a voi stessi:

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

IMO l'applicazione potrebbe essere danneggiato, manipolato o che cosa-così-mai, dopo questo aggiornamento, API 16. Vedo che si è creato un proprio metodo per l'invio invito ad altri peer, anche se questo non è veramente necessario. I peer ricevono automaticamente l'invito in Wi-Fi Direct. Quindi, puoi lasciare che gestisca il processo di invito stesso. Ancora una volta, ti suggerisco di dare un'occhiata a here a meno che tu non l'abbia fatto prima.

+0

No, la mia applicazione funziona ancora come un incantesimo .. Ma nella nuova API JB sta migliorando, alcuni degli errori non vengono più visualizzati. Soprattutto quei piloti che erano davvero difficili da "catturare". – damian

Problemi correlati