Android Q всегда повторно использует первые введенные учетные данные для подключения к сети Wi-Fi.

Я пытаюсь подключиться к Wi-Fi с помощью WifiNetworkSpecifier на Android Q. Проблема, с которой я столкнулся, заключается в том, что Android всегда использует последние действительные учетные данные для подключения к AP, даже после того, как я вручную предоставлю новые обновленные учетные данные для WifiNetworkSpecifier.

Это поток:

  1. Успешно подключитесь к AP.
  2. Измените пароль сети Wi-Fi.
  3. Запустите приложение, попробуйте снова подключиться с обновленными учетными данными (предоставлен новый действительный пароль), но приложение не может подключиться к Wi-Fi (проверка подлинности не выполняется).

Если я переверну логику, произойдет то же самое:

  1. Успешно подключиться к Wi-Fi.
  2. Запустите приложение, предоставьте ему обновленные учетные данные (новый ложный пароль), но приложению удается подключиться к Wi-Fi.

Дело в том, что как только он подключается к SSID с действующими учетными данными, все, что я помещаю в WifiNetworkSpecifier, похоже, не имеет никакого значения, он просто снова и снова использует эти последние действительные учетные данные.

Это происходит на Google Pixel 2 и на Huawei P30 Lite. Однако на Samsung Galaxy S9 все работает нормально (приложение подключается к сети Wi-Fi, если я обновляю пароль сети Wi-Fi и предоставляю приложению новый действительный пароль; и оно не будет подключаться к Wi-Fi, если я предоставлю ему ложный пароль, оба предполагают, что мы ранее успешно подключились к Wi-Fi).

Проблема с Pixel и Huawei «решается» после перезапуска устройства, но когда я снова подключаюсь к Wi-Fi (вводятся действительные учетные данные), мы возвращаемся к той же проблеме.

Я не уверен, что мне здесь не хватает чего-то тривиального, но любая помощь будет очень признательна! Спасибо!

РЕДАКТИРОВАТЬ: оказывается, вам не нужно вводить действительные учетные данные для запуска этого цикла. Например, если вы пытались подключиться к AP с ложным паролем в первый раз и после попытки подключиться с правильным паролем, система использует этот неправильный пароль (первый введенный пароль) для подключения. Опять же, это происходит на Pixel 2 и Huawei 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)
        }

    }

comment
Вы когда-нибудь решали эту проблему?   -  person SoftWyer    schedule 27.01.2021
comment
Похоже, эта известная ошибка в Android, требующая исправления или обновления версии от производителя телефона. .   -  person SoftWyer    schedule 28.01.2021