替代使用Wifi Direct发现对等体,因为它需要两部手机都运行WiFi Direct发现

时间:2018-01-14 09:39:16

标签: android wifi-direct wifip2p

我正在尝试发现WiFi Direct对等Android设备,但只有当两部手机都运行WiFi Direct发现时才会发现对等设备。

到目前为止我所理解的是,只有当他们同时扫描WiFi直接连接时,他们才能看到对方。这是因为WiFi Direct的工作方式是当手机扫描WiFi Direct连接时,他们将与其他对等方协商接入点或从属设备的角色。因此,两者都需要调用discoverPeers()以使其自身可被发现并找到附近的设备。

在我的应用程序中我想要的是只有一个设备启动扫描过程,并且应列出所有支持wifi direct的附近设备。那么如何使用wifi Direct实现这一目标呢?还有其他替代方案。

先谢谢

3 个答案:

答案 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();
        }
    }
}
}

希望它有所帮助(记得更新你的清单,我没有表明)