4

我正在尝试使用 3 台平板电脑创建一个 WI-FI Direct 网络。我想将 WiFi-Direct 作为后台服务运行,并将一台设备设置为自主 GO。有人可以告诉我如何在 Android 中做到这一点吗?还有人请告诉我我们如何设置专用的 SSID 和密码,以便任何时候将新设备添加到此网络,他们可以在应用程序启动期间搜索特定的 ssid 和密码以建立连接?

我正在使用 Android API Level 18 进行开发...

提前致谢 ...

4

4 回答 4

6

这就是创建自治组所有者的方式,即使用以下代码,您可以故意将Wifi 直接网络中的设备设置为组所有者

manager.createGroup(channel,new WifiP2pManager.ActionListener()
{
    @Override
    public void onSuccess()
    {
        Toast.makeText(WiFiDirectActivity.this, "Group Created",Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onFailure(int reason)
    {}              
}); 

您可以在任何事件上使用此代码,例如按钮单击等。

于 2014-03-28T09:14:43.457 回答
2

Bluemoon10 几乎是对的。我还不能发表评论,因为我需要 50 声望:/。config.groupOwnerIntent 的范围是 1-15,其中 15 是成为组所有者的最高意图。如果 2 个设备尝试使用两个 GO Intent == 15 进行连接,则连接调用将失败。如果 GO Intent tie 低于 15,则设备会在 tie Breaker 位上达成一致并会成功。因此,如果您希望一台设备成为群组所有者,您必须确保它是唯一一个尝试成为群组所有者的设备。您可以使用服务发现来执行此操作,即如果有服务正在运行,则在使用该服务的设备上将您的 GO 意图设置为 15,在连接设备上设置为 1。只有一台设备需要调用 connect 来发起连接。

服务发现教程链接:http: //developer.android.com/training/connect-devices-wireless/nsd-wifi-direct.html

于 2014-09-30T16:53:51.230 回答
2

要创建自治组,您只需createGroup()从您的经理调用方法。为了设置ssidpassPhrase,您必须调用 WifiP2pGroup 类setPassphrasesetNetworkName的隐藏方法。

为此,您使用 java 反射。试试下面的例子。

让我们假设WifiP2pGroup对您当前的对象进行分组。

方法

setPassPhraseMethod=group.getClass().getMethod("setPassphrase", new Class[ {String.class});

现在您调用该方法:

setPassPhraseMethod.invoke(group, "yourNewPassPrhase");

希望它是有帮助的。

于 2014-10-17T08:07:08.283 回答
0

通常,组所有者由 WiFi Direct 协议决定。但是,您可以使用 config 类强制执行它。

final WifiP2pConfig config = new WifiP2pConfig();
                    config.deviceAddress=myDeviceAddr;
                    config.wps.setup = WpsInfo.PBC;
                    config.groupOwnerIntent =15;

在这种情况下,我认为我说 15 表示最不可能成为 GO 是正确的,如果您希望该设备成为 GO,则将其设置为零。这也可能是您可以设置 pin 等的地方,看看 WpsInfo。然后将此配置信息传递到您的连接调用中。

mManager.connect(mChannel, config, new WifiP2pManager.ActionListener().

希望这可以帮助。

于 2014-07-28T20:29:35.887 回答