Android Q всегда повторно использовать первые введенные учетные данные для подключения к сети WiFi - PullRequest
2 голосов
/ 23 апреля 2020

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

Это поток:

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

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

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

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

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

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

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

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

    }
...