如何禁止P2P GO接受其他对等体(第二个客户端)连接?

时间:2014-07-21 12:49:02

标签: android p2p wifi-direct

我试图创建一个P2P连接(组),它在Android设备上只有一个所有者和一个客户端。

原因是如果我的GO设备接受第二个对等连接(只是按下了被邀请的窗口),它将收到P2P CONNECTION CHANGED事件(断开连接)。我无法区分正常的P2P断开事件和这种情况。

我的第一个解决方案是在第一次连接后忽略所有连接/断开连接事件,但它会导致其他网站效果。

1 个答案:

答案 0 :(得分:0)

我想我找到了解决方案。

我们可以使用 WifiP2pGroup 来检查在收到断开事件时GO和对等方是否真的存在。

当我们收到真正的p2p断开事件时,它找不到GO或任何对等体,反之亦然。

示例:

else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) {
...
WifiP2pGroup p2pGroup = intent.getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_GROUP);
...
if ( p2pGroup != null ) {
    if ( p2pGroup.getOwner() != null ) {
        Log.d(TAG, "Go address: " + p2pGroup.getOwner().deviceAddress);
    }
    else {
        Log.d(TAG, "p2pGroup getOwner = null");
        return false;
    }

    Collection<WifiP2pDevice> peerList = p2pGroup.getClientList();
    ArrayList<WifiP2pDevice> list = new ArrayList<WifiP2pDevice>(peerList);

    Log.d(TAG, "p2pGroup list size = " + list.size());
    if ( list.size() <= 0 ) { 
        return false;
    }

    ///*
    String host = null;
    for (int i = 1; i < list.size(); i++) {
    host = list.get(i).deviceAddress;
    Log.d(TAG, "peer #" + i + " address: " + host);
    }
    //*/
    }
    else {
        Log.d(TAG, "p2pGroup = null");
            return false;
    }

如果我有任何误解,请告诉我。 谢谢你的阅读。