android - 当我启动应用程序时,NetworkCallback 中的 onLost 不起作用

标签 android kotlin

当我在应用程序中关闭互联网时它可以工作,但当我在没有互联网的情况下启动应用程序时它不起作用

private val networkCallback: ConnectivityManager.NetworkCallback =
    object: ConnectivityManager.NetworkCallback() {
        override fun onAvailable(network: Network) {
            super.onAvailable(network)
            //setButtonEnabled(true)
        }

        override fun onLost(network: Network) {
            super.onLost(network)
            //setButtonEnabled(false)
        }
        

    }

最佳答案

我也看到了同样的事情。如果我在没有网络连接的情况下启动应用程序,则不会调用 NetworkCallback.onLost 或 NetworkCallback.onUnavailable 。然而,如果我通过网络连接启动应用程序,则会调用 NetworkCallback.onAvailable

老实说,对我来说这似乎是一个 ConnectivityManager 错误。我添加了一个解决方法,在设置回调时检查 activeNetwork 是否为空,如果是,我只需运行回调告诉我网络不可用时通常会执行的逻辑。这似乎适合我。

val callback = object : ConnectivityManager.NetworkCallback() {
    override fun onAvailable(network: Network) {
        // Run my onAvailable code
    }

    override fun onLost(network: Network) {
        // Run my onLost code
    }

    override fun onUnavailable() {
        // Run my onUnavailable code
    }
}
connectivityManager.registerDefaultNetworkCallback(callback)

// !!! Added this !!!
// There appears to be an issue where neither NetworkCallback.onLost or NetworkCallback.onUnavailable
// are called if the app is started without a network connection; because of this we cannot
// rely on the callback correctly initializing if offline. Work around here 
// by checking activeNetwork immediately.
if (connectivityManager.activeNetwork == null) {
    // Run my onUnavailable code
}

关于android - 当我启动应用程序时,NetworkCallback 中的 onLost 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70324348/

相关文章:

pattern-matching - Kotlin when() 局部变量介绍

android - 工具栏标题文字颜色

android - 从 1 个 Intent 转到另一个 Intent 且数据来自服务器时,单击按钮时显示进度条

java - 在 Kotlin 中,GSON.fromJson(...) 如何设法改变现有对象的只读字段?

java - DateTimeFormatter 不使用阿拉伯语或孟加拉语的本地数字

spring - Kotlin 协程与 Spring JPA 阻塞存储库

android - TextInputEditText 提示被框轮廓覆盖

android - 全屏通知

java - 如何在 Android 上抑制图像的蓝色或绿色 channel ?

java.lang.NullPointerException : Attempt to invoke interface method 'int java.util.List.size()' on a null object reference 4