首页 文章

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

提问于
浏览
1

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

3 回答

  • 0

    有可能的 . 代码取自我在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和密码短语 .

  • 2

    斯蒂芬的答案很棒,但我发现最好把团体信息告诉他们

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

  • 1

    根据WiFi Direct文档,as mentiond here.

    如果我重新说明文档,

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

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

相关问题