所以我有一个使用服务发现将多个设备连接到一个主机的应用程序。我首先设置一切,然后调用WifiP2pManager.discoverServices(..)。然后,一个设备选择宣传该服务(类似于游戏大厅)。其他设备发现它很好,可以连接没问题。
当一个设备已经托管该服务并尝试连接到已连接到其服务的设备时,就会出现问题(它形成一个持久性组并忽略所有组所有者意图值)。 假设我们有一台托管服务的设备A.另一个设备B连接到A,A是组所有者,并且在Wifi直接设置菜单中形成持久组。两者都完成了使用该应用程序,并决定在以后再次使用它。现在B决定主持该服务。 A尝试连接到B但最终成为组所有者,即使B是由于先前的持久连接而托管服务的那个。 稍后我将设备B的GOI(组所有者意图)设置为15(主机),将设备A的GOI设置为0,它完全忽略它。编辑[实际上我只设置设备A的GOI,因为只有一个设备呼叫连接。]
我的问题是:有没有办法以编程方式从设置菜单中删除旧组?或者您对如何解决我的问题有其他建议吗?
我尝试使用WifiP2pManager.createGroup(..)创建一个新组,这会暂时修复组所有者问题但在启动服务并使用同一设备连接两次后,它会连接到旧的记住的组,并且似乎没有连接到该程序。这可以通过不允许持久化组轻松修复,但似乎尚未作为选项提供。
答案 0 :(得分:0)
我遇到了类似的问题。我正在开发一个简单的服务器客户端应用程序,当我尝试切换卷时出现同样的问题。每次应用程序关闭时,我都会通过调用服务器应用程序中的removeGroup方法解决它。这样我确保该组被移除。
答案 1 :(得分:0)
每当您将groupOwnerIntent
设置为零时,请参阅以下内容:
WifiP2pConfig config = new WifiP2pConfig();
config.groupOwnerIntent = 0;
然后,无论何时尝试从设备A连接设备B,设备A都会成为客户端而设备B成为服务器,反之则只需要在记忆组中不应添加任何组。这不适用于设备设置,因此请勿尝试。您需要创建自己的自定义设置。
答案 2 :(得分:0)
在应用关闭时使用mP2pManager.removeGroup()
P.S。我发现.groupOwnerIntent没有实际意义。您将其设置为要连接的设备。从文档中可以完全不清楚它是否是命令设备的属性或命令连接设备