DefaultNetworkCallback для проверки несоответствия сети не обновляет глобальную переменную состояния успешно - PullRequest
0 голосов
/ 26 марта 2020

Я использовал ConnectivityManager.registerDefaultNetworkCallback для проверки соединения rnet. Я дал <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> в моем AndroidManifest.xml

Я проверяю переменную для подключения к сети, как

    class App : Application() {

    companion object {
        lateinit var userDetails: PhoenixResponse
        lateinit var userSocket: UserSocket
        lateinit var userChannel: UserChannel
        lateinit var chatChannel: UserChannel
        var isNetworkConnected: Boolean = false
    }
}

И функция служебного класса похожа на

@RequiresApi(Build.VERSION_CODES.N)
fun registerDefaultNetworkCallback() {
    try {
        val connectivityManager =
            (context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager)
        connectivityManager.registerDefaultNetworkCallback(@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
        object : NetworkCallback() {
            override fun onAvailable(network: Network) {
                super.onAvailable(network)
                App.isNetworkConnected = true
                Log.d("FLABS:", "onAvailable "+App.isNetworkConnected)
            }

            override fun onLost(network: Network) {
                super.onLost(network)
                App.isNetworkConnected = false
                Log.d("FLABS:", "onLost")
            }

            override fun onBlockedStatusChanged(
                network: Network,
                blocked: Boolean
            ) {
                super.onBlockedStatusChanged(network, blocked)
                Log.d("FLABS:", "onBlockedStatusChanged")
            }

            override fun onCapabilitiesChanged(
                network: Network,
                networkCapabilities: NetworkCapabilities
            ) {
                super.onCapabilitiesChanged(network, networkCapabilities)
                Log.d("FLABS:", "onCapabilitiesChanged")
            }

            override fun onLinkPropertiesChanged(
                network: Network,
                linkProperties: LinkProperties
            ) {
                super.onLinkPropertiesChanged(network, linkProperties)
                Log.d("FLABS:", "onLinkPropertiesChanged")
            }

            override fun onLosing(network: Network, maxMsToLive: Int) {
                super.onLosing(network, maxMsToLive)
                Log.d("FLABS:", "onLosing")
            }

            override fun onUnavailable() {
                super.onUnavailable()
                Log.d("FLABS:", "onUnavailable")
            }
        }
        )
    } catch (e: Exception) {
        Log.d("FLABS: Exception ", "hello")
        App.isNetworkConnected = false
    }
}

Он входит в метод OnAvailable() и обновляет переменную App.isNetworkConnected. Но когда я проверяю это по своей деятельности, это не отражает изменения -

val network = CheckNetwork(applicationContext)
        network.registerDefaultNetworkCallback()
        if (App.isNetworkConnected) {
            // Internet Connected
            Toast.makeText(applicationContext,"You are connected!",Toast.LENGTH_LONG).show()
        } else {
            Toast.makeText(applicationContext,"Network is not connected!",Toast.LENGTH_LONG).show()
            // Not Connected
        }

Хотя у меня есть активное соединение Inte rnet, оно не меняет значение App.isNetworkConnected с false до true -Каждый раз, когда он показывает ложь

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

...