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