我想在普通的Android WiFi设备和另一个具有WiFi直接支持的Android设备之间创建一个p2p连接。 我成功地能够创建一个组(uisng createGroup of WifiP2pManager)并使用由android给出的SSID和密码短语我也成功地将普通的WiFi设备连接到我的WiFi直接启用设备(其中我使用wifi创建了组)直接api)。 但是这里 android提供了一些随机的WiFi SSID和密码短语,这导致我总是查看adb日志以获取SSID名称,然后输入其他设备。
无论如何我可以设置我选择的SSID和密码吗?
由于 科兹洛夫
答案 0 :(得分:2)
requestGroupInfo()使您可以同时获取SSID和密码,但是,我认为不可能调整这些(还)...
答案 1 :(得分:0)
首先,最好的方法是不进行更改,而仅检索WifiP2p设置,并使用蓝牙或NFC等不同的通道将它们传递给连接的旧版设备(该设备不支持WifiP2p,因为只有那里您需要密码) 。 QR码也可能有效。
上一条消息向您展示了如何获取SSID和密码。密码无法更改,但是SSID可以更改。 Wifi Direct规范将SSID设置为“ DIRECT__”,其中xy是设置过程中一些随机生成的字母。因此,您不能更改此前缀“ DIRECT”和两个字母,因为字母和密码短语都是在内部库中生成的,并且只有只读副本会传递回应用程序。
但是,您可以使用反射API更改SSID前缀。
private void openWifiDirectChannel(String name){
WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
WifiP2pManager.Channel channel = manager.initialize(this, getMainLooper(), null);
//Use reflection API to get the hidden method for setting the P2P network name
try {
Method m = manager.getClass().getMethod(
"setDeviceName",
WifiP2pManager.Channel.class, String.class, WifiP2pManager.ActionListener.class );
m.invoke(manager, channel, name, new WifiP2pManager.ActionListener() {
public void onSuccess() {
//Code for Success in changing name
}
public void onFailure(int reason) {
//Code to be done while name change Fails
}
});
} catch (Exception e)
e.printStackTrace();
}