无论如何我可以在wifi直接组创建中设置我选择的SSID和密码
Posted
技术标签:
【中文标题】无论如何我可以在wifi直接组创建中设置我选择的SSID和密码【英文标题】:Is there anyway in which I can set the SSID and passphrase of my choice in wifi direct group creation 【发布时间】:2012-09-04 06:40:17 【问题描述】:我想在一个普通的安卓 WiFi 设备和另一个支持 WiFi 直接的安卓设备之间创建一个 p2p 连接。 我能够成功地创建一个组(WifiP2pManager 的 uisng createGroup)并使用 android 给出的 SSID 和密码短语我还能够成功地将普通 WiFi 设备连接到启用 WiFi 直接的设备(在其中我使用 wifi 创建了组直接api)。 但是这里 android 给出了一些随机的 WiFi SSID 和密码短语,这导致我总是在 adb 日志中查看 SSID 名称,然后输入其他设备。
我可以在其中设置我选择的 SSID 和密码吗?
谢谢 科兹洛夫
【问题讨论】:
【参考方案1】:requestGroupInfo() 使您能够同时获取 SSID 和密码,但是,我认为(目前)还不能调整这些。
【讨论】:
看一下WifiP2pManager中的requestGroupInfo()【参考方案2】:首先,最好的方法是不要更改,而只检索 WifiP2p 设置,然后使用蓝牙或 NFC 等不同通道将连接的旧设备(不支持 WifiP2p 的设备,因为只有那里需要密码)传递给您.二维码也可以使用。
上一条消息向您展示了如何获取 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();
【讨论】:
以上是关于无论如何我可以在wifi直接组创建中设置我选择的SSID和密码的主要内容,如果未能解决你的问题,请参考以下文章