我正在尝试使用 3 台平板电脑创建一个 WI-FI Direct 网络。我想将 WiFi-Direct 作为后台服务运行,并将一台设备设置为自主 GO。有人可以告诉我如何在 Android 中做到这一点吗?还有人请告诉我我们如何设置专用的 SSID 和密码,以便任何时候将新设备添加到此网络,他们可以在应用程序启动期间搜索特定的 ssid 和密码以建立连接?
我正在使用 Android API Level 18 进行开发...
提前致谢 ...
这就是创建自治组所有者的方式,即使用以下代码,您可以故意将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)
{}
});
您可以在任何事件上使用此代码,例如按钮单击等。
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
要创建自治组,您只需createGroup()
从您的经理调用方法。为了设置ssid和passPhrase,您必须调用 WifiP2pGroup 类setPassphrase和setNetworkName的隐藏方法。
为此,您使用 java 反射。试试下面的例子。
让我们假设WifiP2pGroup
对您当前的对象进行分组。
方法
setPassPhraseMethod=group.getClass().getMethod("setPassphrase", new Class[ {String.class});
现在您调用该方法:
setPassPhraseMethod.invoke(group, "yourNewPassPrhase");
希望它是有帮助的。
通常,组所有者由 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().
希望这可以帮助。