I am trying to connect two phones via wifi direct.Both phones support wifi direct. Discovery of peers works fine,I choose device with which I want to connect and broadcast receives WIFI_P2P_THIS_DEVICE_CHANGED_ACTION and device status is Connected for both devices.After a few seconds broadcast receieves again WIFI_P2P_THIS_DEVICE_CHANGED_ACTION, because one device is disconnected.Just one device will call onConnectionInfoAvailable. I can't figure out why this is happening.Can someone help me please?
This is my code for connection:
and this is inside BroadcastReciever
This is my code for connection:
Java:
WifiP2pConfig config = new WifiP2pConfig();
config.deviceAddress = device.deviceAddress;
config.wps.setup = WpsInfo.PBC;
mManager.connect(mChannel, config, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Log.i(TAG, "Connect started success");
}
@Override
public void onFailure(int reason) {
Toast.makeText(MainActivity.this, "Connect start failed",Toast.LENGTH_SHORT).show();
}
});
and this is inside BroadcastReciever
Java:
if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) {
int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1);
if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) {
mActivity.setIsWifiP2pEnabled(true);
} else {
mActivity.setIsWifiP2pEnabled(false);
}
} else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
if (mManager != null) {
mManager.requestPeers(mChannel, (WifiP2pManager.PeerListListener) mActivity.getFragmentManager()
.findFragmentByTag("services"));
}
Log.d(MainActivity.TAG, "P2P peers changed");
} else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) {
if (mManager == null) {
return;
}
NetworkInfo networkInfo = intent.getParcelableExtra(WifiP2pManager.EXTRA_NETWORK_INFO);
Log.i(MainActivity.TAG,"Network info:"+networkInfo.toString());
if (networkInfo.isConnected()) {
// We are connected with the other device, request connection
// info to find group owner IP
mManager.requestConnectionInfo(mChannel,mActivity);
}
} else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) {
WifiP2pDevice device = intent.getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_DEVICE);
Log.d(MainActivity.TAG, "Device status -" + device.status+device.deviceName);
switch (device.status) {
case WifiP2pDevice.CONNECTED:
Log.v(MainActivity.TAG,"mConnected");
break;
case WifiP2pDevice.INVITED:
Log.v(MainActivity.TAG,"mInvited");
break;
case WifiP2pDevice.FAILED:
Log.v(MainActivity.TAG,"mFailed");
break;
case WifiP2pDevice.AVAILABLE:
Log.v(MainActivity.TAG,"mAvailable");
break;
case WifiP2pDevice.UNAVAILABLE:
Log.v(MainActivity.TAG,"mUnavailable");
default:
Log.v(MainActivity.TAG,"mUnknown");
break;
}
}