我能改变Wi-Fi Direct中持久组的组所有者吗?

7

在使用Wi-Fi Direct创建群组时,我知道可以创建一个持久的群组。

我的问题是:我能否创建一个持久的群组,但每次更改群组所有者(即,每轮群组所有者将是群组中的设备之一)。

另外,在创建持久群组时,只需要第一次接受连接,对吗?

3个回答

15

现在,您可以通过WifiP2pManager.createGroup(...)创建一个新的持久化组。它将创建一个新的组,并使调用设备(A)成为组所有者,可以执行您所描述的操作。唯一的问题是,一旦您创建了一个组并连接到另一个设备(B),该设备将记住该特定组。如果您尝试在A中创建一个新组(比如第二次打开应用程序)并从B连接,它将自动加入旧组,并不会显示为已连接到A的新组。

编辑: 有一种方法可以清除所有持久性组。这是一个名为deletePersistentGroups的隐藏函数。虽然这将抹掉每一个持久性组,但它似乎是解决您问题的唯一可靠方法。在您调用WifiP2pManager.initialize(...)之后调用此功能,以便您可以使用通道。

private void deletePersistentGroups(){
    try {
        Method[] methods = WifiP2pManager.class.getMethods();
        for (int i = 0; i < methods.length; i++) {
            if (methods[i].getName().equals("deletePersistentGroup")) {
                // Delete any persistent group
                for (int netid = 0; netid < 32; netid++) {
                    methods[i].invoke(wifiP2pManager, mChannel, netid, null);
                }
            }
        }
    } catch(Exception e) {
        e.printStackTrace();
    }
}
我不太确定为什么 netid 会增加到31,我认为那可能是允许记住的最大连接数。代码摘自这里

2
我知道不鼓励说谢谢,但是我必须说一声“谢谢”。 - CrandellWS
https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/wifi/java/android/net/wifi/p2p/WifiP2pManager.java#1338 - CrandellWS
据我所知,32是最大值。https://android.googlesource.com/platform/frameworks/base/+/b267554/wifi/java/android/net/wifi/p2p/WifiP2pGroupList.java#34 - CrandellWS
有没有人在 Xamarin 中做过同样的事情? - Renaud

3
你第一个问题的答案是不可以。"当P2P组被形成时,持久性P2P组的P2P组所有者已确定,并且在后续的P2P组会话中是相同的P2P设备。"这一行来自p2p规范,意味着你无法更改组所有者。
是的,在第一次连接时需要接受连接。持久组允许重新连接而无需用户干预。

请实际回答所提出的问题,尽管对我有帮助的是-> https://dev59.com/em_Xa4cB1Zd3GeqPxBQ-#26242221 - CrandellWS

0

Android WiFi Direct框架尚不支持持久性行为。


1
现在是可以的。这个答案可能已经过时了。 - Cypress Frankenfeld
更具讽刺意味的是,它曾经不会持久存在,但现在它已经被修复了,我无法将其删除,因为它真的非常持久。 - CrandellWS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接