Can I connect a WiFi Direct enabled device to any other device which doesn't have WiFi Direct feature but supports WiFi hotspot connection? Does WiFi direct uses specialized hardware to be present on both devices? Will network discovery work in such cases?
It is possible. Code taken from a talk I gave at Droidcon UK 2013.
You need to call the createGroup(WifiP2pManager.Channel c, WifiP2pManager.ActionListener listener)
method of the WifiP2pManager class. This will create a Wi-Fi Direct group that supports legacy Wi-Fi connections.
Prior to the call, you need to register a broadcast receiver similar to this:
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals
(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION)){
wifiP2pManager.requestGroupInfo(channel,
new WifiP2pManager.GroupInfoListener() {
@Override
public void onGroupInfoAvailable(WifiP2pGroup group) {
if(group != null){
// clients require these
String ssid = group.getNetworkName(),
String passphrase = group.getPassphrase()
}
}
});
}
}
};
The other devices can then use Wi-Fi to connect to the Wi-Fi Direct device, once they have the ssid and passphrase.
Stephen's answer is great, but I found it's better to get the group info at
WIFI_P2P_CONNECTION_CHANGED_ACTION
...
if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) {
NetworkInfo networkInfo = intent.getParcelableExtra(WifiP2pManager.EXTRA_NETWORK_INFO);
WifiP2pInfo wifiP2pInfo = intent.getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_INFO);
if (networkInfo.isConnected() && wifiP2pInfo.groupFormed) {
if (wifiP2pInfo.isGroupOwner) {
wifiP2pManager.requestGroupInfo(channel, new WifiP2pManager.GroupInfoListener() {
@Override
public void onGroupInfoAvailable(final WifiP2pGroup wifiP2pGroup) {
if (wifiP2pGroup != null) {
// clients require these
String ssid = wifiP2pGroup.getNetworkName();
String passphrase = wifiP2pGroup.getPassphrase();
...
}
}
}
}
}
}
}
...
Because this can make sure the access point is created and current device is the group owner (GO).
It is possible according to the WiFi Direct documentation, as mentiond here.
If I re-phrase the documentation,
Create a p2p group with the current device as the group owner.This essentially creates an access point that can accept connections from legacy clients as well as other p2p devices
but the guides are for a pretty narrow scope. you'll have to do a bit of research to find out how to implement!
来源:https://stackoverflow.com/questions/25303112/wifi-direct-device-connection-with-other-android-devices