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?
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
Hai trovato qualche soluzione per questo? – Zach
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