我是否可以将支持WiFi Direct的设备连接到任何其他没有WiFi Direct功能但支持WiFi热点连接的设备? WiFi直接使用专用硬件是否存在于两个设备上?网络发现会在这种情况下发挥作用吗?
答案 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设备
但指南适用范围很窄。你需要做一些研究才能找到实施方法!