如何在android上创建一个非持久的WiFi直接组?

时间:2015-02-14 17:53:45

标签: android wifi-direct wifip2p

首次调用WifiP2pManager.connect时,目标设备上会有一个确认对话框来接受连接。

在后续连接中,不再询问此确认,该组将保留在设备上。

我不想要这种行为,因为我希望启动连接的设备始终是组所有者。持久保存组时,无法更改组所有者。

有没有办法创建临时组而不是持久组?或者,当我完成它时,我可以“忘记”持久性群体吗?

3 个答案:

答案 0 :(得分:4)

WifiP2pManager.removeGroup没有做我想要的。当您重新连接到同一设备时,它仍会记住该组。

但是我发现有一个隐藏的方法WifiP2pManager.deletePersistentGroup我现在用反射来调用。这不好,但现在需要做。

private void removeAndDeleteGroup(WifiP2pGroup wifiP2pGroup) {
    wifiP2PManager.removeGroup(wifiChannel, new SimpleLoggingActionListener("removeGroup"));
    try {
        Method getNetworkId = WifiP2pGroup.class.getMethod("getNetworkId");
        Integer networkId = (Integer) getNetworkId.invoke(wifiP2pGroup);
        Method deletePersistentGroup = WifiP2pManager.class.getMethod("deletePersistentGroup",
                WifiP2pManager.Channel.class, Integer.class, WifiP2pManager.ActionListener.class);
        deletePersistentGroup.invoke(wifiP2PManager, wifiChannel, networkId, new SimpleLoggingActionListener("deletePersistentGroup"));
    } catch (NoSuchMethodException e) {
        Log.e("WIFI", "Could not delete persistent group", e);
    } catch (InvocationTargetException e) {
        Log.e("WIFI", "Could not delete persistent group", e);
    } catch (IllegalAccessException e) {
        Log.e("WIFI", "Could not delete persistent group", e);
    }
}

答案 1 :(得分:1)

抱歉,我没有足够的声誉发表评论,但Jimmy Praet的答案实际上是正确的,但有错误。 deletePersistentGroup方法不接收Integer作为参数,而是接收int,因此导致NoSuchMethodException。下面显示了获取deletePersistentGroup方法的正确代码。

public static void deletePersistentGroup(WifiP2pManager manager, WifiP2pManager.Channel channel) {
    try {
        Method method = WifiP2pManager.class.getMethod("deletePersistentGroup",
                WifiP2pManager.Channel.class, int.class, WifiP2pManager.ActionListener.class);

        for (int netId = 0; netId < 32; netId++) {
            method.invoke(manager, channel, netId, null);
        }
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }
}

答案 2 :(得分:0)

不在Wifip2pManager中删除Group做你需要的吗? http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.html#removeGroup(android.net.wifi.p2p.WifiP2pManager.Channel,android.net.wifi.p2p.WifiP2pManager.ActionListener)

我认为,当你完成连接时会调用它会导致它每次都要求重新连接。