Android addNetworkSuggestion не работает

я кодирую 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)
                        }
                    }
                }
            }

есть идеи, почему это не сработало? Думаю, я переключаюсь на requestNetwork, лол.

pldenc44 29.03.2023 19:45
1
1
512
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что ж, мне удалось перейти с 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)
                        }
                    }
                }
            }

Это также работает для меня. Но у меня появился другой вопрос. Я не могу забыть/удалить эту сеть. Как это отключить

赵小甲 30.12.2022 03:56

Другие вопросы по теме