【问题标题】:Android - How to connect Wi-Fi using SSID and PasswordAndroid - 如何使用 SSID 和密码连接 Wi-Fi
【发布时间】:2020-02-14 04:28:06
【问题描述】:

我从用户那里获取 SSID 和密码作为输入。我想创建一个返回连接成功无效凭据的函数connectWifi(String SSID, String password)。使用 SSID 和密码连接 Wi-Fi 的最佳方式是什么?

【问题讨论】:

标签: java android android-studio wifi android-wifi


【解决方案1】:

您可以尝试以下代码 sn-p 来检查可用的 wifi 网络并连接到指定的 wifi 网络。

List<ScanResult> wifiScanList = wifi.getScanResults();
         wifis = new String[wifiScanList.size()];

         for(int i = 0; i < wifiScanList.size(); i++){
            wifis[i] = ((wifiScanList.get(i)).SSID);                

            if(wifis[i].equals("WiredSSID")) {

                 WifiConfiguration wifiConfig = new WifiConfiguration();
                 wifiConfig.SSID = String.format("\"%s\"", wifis[i]);
                 wifiConfig.preSharedKey = String.format("\"%s\"", "password");

                 WifiManager wifiManager = (WifiManager)getSystemService(WIFI_SERVICE);
                 //remember id
                 int netId = wifiManager.addNetwork(wifiConfig);
                 wifiManager.disconnect();
                 wifiManager.enableNetwork(netId, true);
                 wifiManager.reconnect();
             }
         }

而且您还必须检查正确的权限!

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

【讨论】:

  • 如果我输入了错误的密码,它仍然连接到 Wi-Fi。如果用户第一次连接到 Android 手机上的 Wi-Fi,则此实现不起作用。我想验证密码是否正确。有没有办法完成这项工作?
  • 你一定要去这个链接,希望你能得到答案:https://medium.com/@josiassena/android-manipulating-wifi-using-the-wifimanager-9af77cb04c6a
【解决方案2】:

我们可以使用以下方法使用提供的密码连接wifi

String connectWifi(String ssid, String password){
   WifiConfiguration wifiConfig = new WifiConfiguration();
   wifiConfig.SSID = String.format("\"%s\"", ssid);
   wifiConfig.preSharedKey = String.format("\"%s\"", password);
   WifiManager wifiManager = (WifiManager)getSystemService(WIFI_SERVICE);
   //remember id
   int netId = wifiManager.addNetwork(wifiConfig);
   wifiManager.disconnect();
   wifiManager.enableNetwork(netId, true);

   boolean isConnectionSuccessful = wifiManager.reconnect();

   if(isConnectionSuccessful){
       return "connection successful";
   }else{
       return "invalid credential";
   }
}

【讨论】:

  • 如果凭据正确则连接成功
【解决方案3】:

android 10 及以上版本可以使用此功能

private fun connectToYourWifi(ssid: String, password:String) {

        val wifiNetworkSpecifier = WifiNetworkSpecifier.Builder()
            .setSsid(ssid)
            .setWpa2Passphrase(password)
            .build()

        val networkRequest = NetworkRequest.Builder()
            .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
            .setNetworkSpecifier(wifiNetworkSpecifier)
            .build()

        val connectivityManager =
            applicationContext!!.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        connectivityManager.requestNetwork(networkRequest, ConnectivityManager.NetworkCallback())
    }

此代码打开默认对话框以连接您要连接的特定 wifi。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 2018-11-20
    • 2012-09-11
    • 1970-01-01
    相关资源
    最近更新 更多