4

根据官方文档,由于 getActiveNetworkInfo 现在在 Android 中已被弃用,我正在使用以下实现来获取有关 Internet 连接的回调。

private val connectivityManager: ConnectivityManager by lazy {
   getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
}

private val builder: NetworkRequest.Builder by lazy {
   NetworkRequest.Builder()
}

private val networkCallback: NetworkCallback by lazy {
   object : NetworkCallback() {
      override fun onAvailable(network: Network?) {
          println("Connection is online")
      }

      override fun onLost(network: Network?) {
          println("Connection is offline")
      }
   }
}

override fun onResume() {
   super.onResume()
   connectivityManager.registerNetworkCallback(builder.build(), networkCallback)
}

override fun onPause() {
   super.onPause()
   connectivityManager.unregisterNetworkCallback(networkCallback)
}

连接在线的时候注册这个回调很好用,但是断网的时候注册回调就不行了。为了测试这样的场景,我关闭了我的应用程序。然后关闭互联网连接,然后打开应用程序。

我们有什么办法知道应用程序正在打开吗?如果有,请帮忙分享一下。谢谢。

4

2 回答 2

1

根据您的问题,我建议您阅读 Android 文档的这一部分。您正在使用 onPause() 和 onResume(),您应该尝试 onStop()。

但我认为你必须在你的逻辑connectivityManager.unregisterNetworkCallback(networkCallback)之后调用super.onPause(),因为它会在你的方法被调用之前暂停应用程序。

于 2020-01-30T08:43:46.483 回答
0
override func onUnavailable() {
   println("onUnavailable")
}

这个方法永远不会被调用。

于 2021-07-07T20:06:08.013 回答