я кодирую POC для подключения к определенному WIFI Это хорошо работает для устройства < 29, но не для других
Я получаю «Добавлено предложение» в логарифме, но на экране ничего не отображается, я работаю над Android MI 9T pro.
Тот же тест работает для устройства на Android 28, поэтому мои учетные данные в порядке :)
val networkSSID = "XXX"
val networkPass = "XXX"
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
// doesn't show suggestion even if have "Suggestion Added" in the log
val networkSuggestion1 = WifiNetworkSuggestion.Builder()
.setSsid(networkSSID)
.setWpa2Passphrase(networkPass)
.build()
val suggestionsList = listOf(networkSuggestion1)
var status = wifiManager?.addNetworkSuggestions(suggestionsList)
Log.i("WifiNetworkSuggestion", "Adding Network suggestions status is $status")
if (status == WifiManager.STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_DUPLICATE) {
Log.d(TAG, "Suggestion Update Needed")
status = wifiManager?.removeNetworkSuggestions(suggestionsList)
Log.i("WifiNetworkSuggestion", "Removing Network suggestions status is $status")
status = wifiManager?.addNetworkSuggestions(suggestionsList)
}
if (status == WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) {
Log.d(TAG, "Suggestion Added")
}
} else {
// Works perfectly good
val wifiManager = context?.getSystemService(WIFI_SERVICE) as WifiManager?
if (havePermission) {
var found = false
for (config in wifiManager?.configuredNetworks!!) {
if (config.SSID == String.format("\"%s\"", wifi.SSID)) {
wifiManager?.enableNetwork(config.networkId, true)
found = true
break
}
}
if (!found) {
val wifiConfiguration = WifiConfiguration()
wifiConfiguration.SSID = String.format("\"%s\"", networkSSID)
wifiConfiguration.preSharedKey = String.format("\"%s\"", networkPass)
val wifiID = wifiManager?.addNetwork(wifiConfiguration)
if (wifiID != null) {
wifiManager?.enableNetwork(wifiID, true)
}
}
}
}
Что ж, мне удалось перейти с addNetworkSuggestion на библиотеку requestNetwork.
Вот мой окончательный код:
val networkSSID = "XXX"
val networkPass = "XXX"
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
val wifiNetworkSpecifier: WifiNetworkSpecifier?
if (networkPass.isEmpty()) {
wifiNetworkSpecifier =
WifiNetworkSpecifier.Builder().setSsid(networkSSID).build()
} else {
wifiNetworkSpecifier = WifiNetworkSpecifier.Builder().setSsid(networkSSID)
.setWpa2Passphrase(networkPass).build()
}
val networkRequest = NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.setNetworkSpecifier(wifiNetworkSpecifier)
.build()
val connectivityManager =
context?.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
val networkCallback = object : ConnectivityManager.NetworkCallback() {
override fun onUnavailable() {
super.onUnavailable()
}
override fun onLosing(network: Network, maxMsToLive: Int) {
super.onLosing(network, maxMsToLive)
}
override fun onAvailable(network: Network) {
super.onAvailable(network)
connectivityManager?.bindProcessToNetwork(network)
}
override fun onLost(network: Network) {
super.onLost(network)
}
}
connectivityManager?.requestNetwork(networkRequest, networkCallback)
} else {
val wifiManager = context?.getSystemService(WIFI_SERVICE) as WifiManager?
if (havePermission) {
var found = false
for (config in wifiManager?.configuredNetworks!!) {
if (config.SSID == String.format("\"%s\"", wifi.SSID)) {
wifiManager?.enableNetwork(config.networkId, true)
found = true
break
}
}
if (!found) {
val wifiConfiguration = WifiConfiguration()
wifiConfiguration.SSID = String.format("\"%s\"", networkSSID)
wifiConfiguration.preSharedKey = String.format("\"%s\"", networkPass)
val wifiID = wifiManager?.addNetwork(wifiConfiguration)
if (wifiID != null) {
wifiManager?.enableNetwork(wifiID, true)
}
}
}
}
Это также работает для меня. Но у меня появился другой вопрос. Я не могу забыть/удалить эту сеть. Как это отключить
есть идеи, почему это не сработало? Думаю, я переключаюсь на requestNetwork, лол.