Я пытаюсь подключиться к WiFi с помощью WifiNetworkSpecifier на Android Q. Проблема, с которой я сталкиваюсь, заключается в том, чтобы Android всегда использовал последние действительные учетные данные для подключения к точке доступа, даже после того, как я вручную предоставил новую, обновленную учетные данные для WifiNetworkSpecifier.
Это поток:
- Успешно подключитесь к точке доступа.
- Измените пароль сети WiFi.
- Запустите приложение, попробуйте подключиться снова с обновленными учетными данными (новый действительный пароль предоставлен), но приложение не может подключиться к WiFi (аутентификация не проходит).
Если я переверну логи c, происходит то же самое:
- Успешно подключиться к WiFi.
- Запустите приложение, предоставьте ему обновленные учетные данные (новый, ложный пароль), но приложение управляет подключиться к 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)
}
}