WiFi Direct设备与其他Android设备的连接

时间:2014-08-14 08:11:19

标签: android wifi wifi-direct access-point wifip2p

我是否可以将支持WiFi Direct的设备连接到任何其他没有WiFi Direct功能但支持WiFi热点连接的设备? WiFi直接使用专用硬件是否存在于两个设备上?网络发现会在这种情况下发挥作用吗?

3 个答案:

答案 0 :(得分:2)

有可能。代码取自我在Droidcon UK 2013上发表的演讲。

您需要调用WifiP2pManager类的createGroup(WifiP2pManager.Channel c, WifiP2pManager.ActionListener listener)方法。这将创建一个支持传统Wi-Fi连接的Wi-Fi Direct组。

在通话之前,您需要注册类似于此的广播接收器:

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() 
                    }
                }
            });
        }
    }
};

其他设备可以使用Wi-Fi连接到Wi-Fi Direct设备,一旦他们拥有ssid和密码短语。

答案 1 :(得分:1)

斯蒂芬的答案很棒,但我发现在

获取小组信息更好
  

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();
                            ...
                        }
                    }
                }
            }
        }
    }
}
...

因为这可以确保创建接入点并且当前设备是组所有者(GO)。

答案 2 :(得分:0)

根据WiFi Direct文档, as mentiond here.

如果我重新说明文档,

  

使用当前设备作为组所有者创建一个p2p组。这个   本质上创建一个可以接受来自的连接的接入点   旧客户端以及其他p2p设备

但指南适用范围很窄。你需要做一些研究才能找到实施方法!