WiFi Direct device connection with other Android devices

后端 未结 3 1176
情歌与酒
情歌与酒 2021-01-15 18:17

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 specialize

相关标签:
3条回答
  • 2021-01-15 19:16

    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.

    0 讨论(0)
  • 2021-01-15 19:17

    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).

    0 讨论(0)
  • 2021-01-15 19:17

    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!

    0 讨论(0)
提交回复
热议问题