【问题标题】:Unable to Connect to Wifi via Application无法通过应用程序连接到 Wifi
【发布时间】:2021-04-18 10:36:56
【问题描述】:

我已经从我的运行时提供了数据

 ssid = "Some SSID";
 password = "myPassword";

我想用它们连接到 WIFI。 到目前为止我的代码:

try {
        WifiConfiguration conf = new WifiConfiguration();
        conf.SSID = "\"" + networkSSID + "\"";

        conf.preSharedKey = "\"" + password + "\"";

        conf.status = WifiConfiguration.Status.ENABLED;
        conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
        conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
        conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
        conf.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
        conf.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);

        WifiManager wifiManager = (WifiManager) MainActivity.this.getSystemService(Context.WIFI_SERVICE);
        int netId = wifiManager.addNetwork(conf);
        wifiManager.enableNetwork(netId, true);
        return true;
    } catch (Exception ex) {
        ex.printStackTrace();
        return false;
    }
// ignore the returns

问题是,我的 addNetork() 返回 -1,因此我的 enableNetowrk() 失败。我愿意接受任何建议甚至重构。我也知道它适用于所有情况下的 WPA,所以不需要不同...

【问题讨论】:

    标签: android wifi connect wpa


    【解决方案1】:

    试试这个 sn-p 代码,将 Wi-Fi 连接到 Sdk 28

     WifiManager wifiManager = (WifiManager) mContext.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
            if (wifiManager != null) {
               if (!wifiManager.isWifiEnabled()) {
                    wifiManager.setWifiEnabled(true);
                }
                WifiConfiguration wifiConfig = new WifiConfiguration();
                wifiConfig.SSID = String.format("\"%s\"", deviceSsid);
                wifiConfig.preSharedKey = String.format("\"%s\"", devicePass);
    
                int networkId = wifiManager.getConnectionInfo().getNetworkId();
                wifiManager.removeNetwork(networkId);
                wifiManager.saveConfiguration();
                //remember id
                int netId = wifiManager.addNetwork(wifiConfig);
                wifiManager.disconnect();
                wifiManager.enableNetwork(netId, true);
                wifiManager.reconnect();
            }
    

    如果您在 Android 10 及更高版本中连接 Wifi,则有许多选项,例如 Wi-Fi 建议 API、WifiNetworkSpecifier API,但我更喜欢设置面板。

    用于打开设置面板使用

    Intent panelIntent = new Intent(Settings.Panel.ACTION_WIFI);
    startActivityForResult(panelIntent,101);
    

    并在onActivityResult(int requestCode, int resultCode, @Nullable Intent data) 中获取它的回调。

    【讨论】:

    • 我已经试过上面的代码了。较低的我尝试了所有的api都没有成功。我也不需要设置面板​​,因为它显示了所有没有密码的可用网络。我已经知道要使用哪个密码连接到哪个网络
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 2021-04-18
    • 2016-09-21
    • 1970-01-01
    相关资源
    最近更新 更多