Диалог в API запроса сети Wi-Fi - PullRequest
0 голосов
/ 17 января 2020

Я использую новый API 29 для подключения устройства к сети Wi-Fi на устройстве Android 10:

    private val connectivityManager: ConnectivityManager by inject()

    override fun connectToNetwork(ssid: String, password: String) {
        val networkRequest = buildNetworkRequest(ssid, password)

        val networkCallback =
            object : NetworkCallback() {
                override fun onAvailable(network: Network) {
                    super.onAvailable(network)
                    Timber.d("Connected to network $ssid")
                }

                override fun onUnavailable() {
                    super.onUnavailable()
                    Timber.e("Unable to connect to network $ssid")
                }
            }

        connectivityManager.requestNetwork(networkRequest, networkCallback, CONNECTION_TIME_OUT)

    }

    private fun buildNetworkRequest(ssid: String, password: String) =
        NetworkRequest.Builder()
            .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
            .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
            .setNetworkSpecifier(buildWifiNetworkSpecifier(ssid, password))
            .build()

    private fun buildWifiNetworkSpecifier(ssid: String, password: String) =
        WifiNetworkSpecifier.Builder()
            .setSsid(ssid)
            .setWpa2Passphrase(password)
            .build()

Появляется диалоговое окно с «Устройство для использования» с указанным сеть Wi-Fi в списке. В диалоге есть две кнопки «отменить» и «подключиться». Когда я нажимаю «подключить», устройство подключается к сети Wi-Fi (я вижу это в настройках системы), и кнопка подключения отключается.

Но диалоговое окно не исчезает go и ни методы в обратном вызове requestNetwork вызывается. В конце концов я достигаю указанного времени ожидания, и появляется другое диалоговое окно с сообщением «Что-то произошло. Приложение отменило запрос на выбор устройства».

Что здесь происходит? Я хочу подключиться к сети и вызвать методы 'onAvailable' или 'onUnavailable' в обратном вызове.

1 Ответ

0 голосов
/ 17 января 2020

Попробовав практически все, мне наконец-то удалось сделать эту работу, как и ожидалось. Не знаю почему, но когда я зашел в системные настройки устройства и забыл сеть Wi-Fi, которую я пытался подключить программным способом, это начало работать.

Я рад, что избавился от проблемы, но я не знаю, что вызвало это, и есть риск, что то же самое случится с будущим пользователем.

...