我正在尝试发现WiFi Direct对等Android设备,但只有当两部手机都运行WiFi Direct发现时才会发现对等设备。
到目前为止我所理解的是,只有当他们同时扫描WiFi直接连接时,他们才能看到对方。这是因为WiFi Direct的工作方式是当手机扫描WiFi Direct连接时,他们将与其他对等方协商接入点或从属设备的角色。因此,两者都需要调用discoverPeers()以使其自身可被发现并找到附近的设备。
在我的应用程序中我想要的是只有一个设备启动扫描过程,并且应列出所有支持wifi direct的附近设备。那么如何使用wifi Direct实现这一目标呢?还有其他替代方案。
先谢谢
答案 0 :(得分:2)
使用WiFiDirect无法实现目标。 您需要在所有要连接的设备上打开WiFiDirect(以编程方式或手动方式)。
但是有一种方法可以减少发现过程的努力。您可以使用a service discovering代替regular p2p connection.
它允许仅在一个设备(客户端)上进行p2p发现。第二个设备(服务器)正在等待连接邀请。
在我们的一个应用程序中,我们遇到了一个问题:当设备进行p2p发现时,网络的带宽会大大降低,从而导致断开连接的设备。
使用服务发现确实帮助了我们。您可以使用the code作为示例。
答案 1 :(得分:0)
我能找到的唯一选择是导航到Wi-Fi Direct设置。在Android 6.0设备上,它可以像这样实现:Wi-Fi - >设置(右上角的3个点菜单) - > Wi-Fi Direct。最有可能的是它本身就开始了发现过程......
我扣除的是Wi-Fi Direct不是独立的功能,例如蓝牙。它是Wi-Fi的一部分,因此无法单独打开/关闭。 Wi-Fi P2P网络创建从群组所有者协商开始,该协商只能在支持Wi-Fi Direct的设备之间执行。随着P2P组的形成,它也可用于Wi-Fi传统设备(它的工作方式类似于标准的ad-hoc网络,所有支持Wi-Fi的设备都可以看到)。
因此,为了创建P2P网络(组),您必须与其他P2P设备协商,这只有在您打开Wi-Fi Direct时才有可能。
答案 2 :(得分:0)
您已注意到设备都应处于发现模式。 我目前正在开展一个关于WIFI-DIRECT的项目,是的,它非常不可靠。 在连接和/或断开连接后,您也会发现很难发现。 所以我所做的是,当用户打开设备WIFI时,我使用线程(无限循环中的背景)在每8秒后运行发现并更新UI。这对我有用,用户不必连续搜索。
public class DiscoveryUpdater implements Runnable {
@Override
public void run() {
while(true) {
mManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Log.d("DiscoveryUpdater", "Successful in adding Discovery Request");
mManager.requestPeers(mChannel,peerListListener);
}
@Override
public void onFailure(int reasonCode) {
Log.d("DiscoveryUpdater", "Failed in adding Discovery Request "+reasonCode);
}
});
try {
Thread.sleep(8000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
希望它有所帮助(记得更新你的清单,我没有表明)