1

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

4

3 回答 3

2

有可能的。代码摘自我在 Droidcon UK 2013 上的一次演讲。

您需要调用createGroup(WifiP2pManager.Channel c, WifiP2pManager.ActionListener listener)WifiP2pManager 类的方法。这将创建一个支持旧版 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() 
                    }
                }
            });
        }
    }
};

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

于 2014-09-07T20:13:59.060 回答
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)。

于 2016-11-02T12:25:27.960 回答
0

如此处所述,根据 WiFi Direct 文档是可能的

如果我重新表述文档,

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

但指南的范围很窄。您必须进行一些研究才能了解如何实施!

于 2014-08-17T14:25:48.910 回答