无论如何,我可以在wifi直接组创建中设置我选择的SSID和密码

问题描述 投票:3回答:2

我想在普通的Android WiFi设备和另一个具有WiFi直接支持的Android设备之间创建一个p2p连接。我成功地能够创建一个组(uisng createGroup of WifiP2pManager)并使用由android给出的SSID和密码短语我也成功地将普通的WiFi设备连接到我的WiFi直接启用设备(其中我使用wifi创建了组)直接api)。但是这里android提供了一些随机的WiFi SSID和密码短语,这导致我总是查看adb日志的SSID名称然后进入其他设备。

无论如何,我可以设置我选择的SSID和密码吗?

谢谢Kozlov

android android-wifi wifi-direct
2个回答
2
投票

requestGroupInfo()使您可以同时获取SSID和密码,但是,我认为不可能调整这些(还)。


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();
    }
© www.soinside.com 2019 - 2024. All rights reserved.