首页 > 解决方案 > Android Q 总是重复使用第一个输入的凭据来连接到 WiFi 网络

问题描述

我正在尝试使用 Android Q 上的 WifiNetworkSpecifier 连接到 WiFi。我遇到的问题是 Android 始终使用最后一个有效凭据连接到 AP,即使在我手动向 WifiNetworkSpecifier 提供新的、更新的凭据之后也是如此。

这是流程:

  1. 成功连接AP。
  2. 更改 WiFi 网络的密码。
  3. 运行应用程序,尝试使用更新的凭据(提供新的有效密码)再次连接,但应用程序无法连接到 WiFi(身份验证失败)。

如果我颠倒逻辑,也会发生同样的事情:

  1. 成功连接到WiFi。
  2. 运行应用程序,为其提供更新的凭据(新的、错误的密码),但应用程序设法连接到 WiFi。

关键是,一旦它使用有效凭据连接到 SSID,无论我放入 WifiNetworkSpecifier 似乎都没有任何区别,它只是一遍又一遍地使用最后一个有效凭据。

这发生在 Google Pixel 2 和华为 P30 Lite 上。但是,在三星 Galaxy S9 上一切正常(如果我更新 WiFi 网络密码并为应用程序提供新的有效密码,应用程序将连接到 WiFi 网络;如果我提供它,它将无法连接到 WiFi假密码,都假设我们之前成功连接到 WiFi)。

重新启动设备后,Pixel 和华为的问题得到“解决”,但是当我再次连接到 WiFi(输入有效凭据)时,我们又回到了同样的问题。

我不确定我是否在这里遗漏了一些琐碎的事情,但我们将不胜感激任何帮助!谢谢!

编辑:事实证明,您不必输入有效凭据即可触发此循环。例如,如果您第一次尝试使用错误密码连接 AP,并且尝试使用正确密码连接后,系统会使用此错误密码(第一次输入的密码)进行连接。同样,这发生在 Pixel 2 和华为 P30 Lite 上,但在 Galaxy S9 和 S9+ 上运行良好。重新启动手机仍会清除此“状态”。

这是代码:

    @RequiresApi(api = Build.VERSION_CODES.Q)
    private fun connectToWiFiOnQ(context: Context, wifiCredentials: WifiCredentials) {
        val connectivityManager: ConnectivityManager =
            context.applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager

        val networkSpecifier = WifiNetworkSpecifier.Builder()
            .setSsid(wifiCredentials.networkSSID)
            .setWpa2Passphrase(wifiCredentials.password)
            .setIsHiddenSsid(wifiCredentials.isSSIDHidden)
            .build()

        val request = NetworkRequest.Builder()
            .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
            .setNetworkSpecifier(networkSpecifier)
            .build()

        networkCallback = object : ConnectivityManager.NetworkCallback() {
            override fun onAvailable(network: Network) {
                super.onAvailable(network)
                connectivityManager.bindProcessToNetwork(network)
            }
        }

        networkCallback?.let {
            connectivityManager.requestNetwork(request, it)
        }

    }

标签: androidandroid-wifiandroid-networkingandroid-10.0android-connectivitymanager

解决方案


推荐阅读