so a couple of months ago I've started developing some WiFi-Direct applications. A few days ago, I updated both of my Galaxy Nexus to Jelly Bean (4.1.x) and tested my applications, but it seems like there's something messed up again.. It was already a pain in the ass to get the main functionality set up on ICS, but now it does not work anymore.
All i get is something like this in my 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
The "Invitation dialog" pops up correctly at the second phone, and "sometimes" (random) it even works, but only in every fifth try or something. So the logcat tells me, as I'm no professional with android-intern codes, that the negotiation simply fails, the device gets lost for a brief moment, and is then discovered again, seems all kinda messed up.
My invitation is sent out like this:
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);
}
}
});
}
I've read a lot on wifi direct on android, and it's been working fine until I updated the phones to jelly bean.. anyone knows, what could be wrong? If you need more code samples or any specific part of the code, just tell me, as I don't know what could be reliable for this.
Thank you for your help.
EDIT:
Changed the WifiP2pConfig.wps.setup method to "display", which resulted in device #1 displaying a PIN code, device #2 popping up a dialog with an input field - after entering the correct pin this is what logcat told me:
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
Interesting would be: 08-31 15:13:43.491: W/wpa_supplicant(384): p2p-p2p0-3: Could not connect to kernel driver
I think. Looks like a bug in Android's own wifi-direct-framework to me?
To mark this question as answered, I'll just copy my "solution" to this problem:
Seems like group formation only fails if you're in another wifi network, like in your home wifi or such.. so Android fails to disable it - thus fails to connect via WiFi Direct.
I had to make sure the devices were not in a wifi network.