无论如何我可以在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和密码的主要内容,如果未能解决你的问题,请参考以下文章

手机怎么设置虚拟wifi

带频道的 wifi p2p 网络

Linux如何设置wifi

wifi直接android应用创建

如何在 android 上创建非持久 WiFi 直连组?

Android:如何获取当前设备 WiFi 直接名称