当互联网关闭然后应用程序在 NetworkCallback 内启动时无法获得回调

Jig*_*gar 8 android android-connectivitymanager

根据官方文档,由于 getActiveNetworkInfo 现在在 Android 中已被弃用,因此我使用下面的实现来获取有关互联网连接的回调。

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)
}
Run Code Online (Sandbox Code Playgroud)

当连接在线时注册此回调时,它可以正常工作,但当互联网关闭然后我们注册回调时,它不能正常工作。为了测试这种情况,我关闭了我的应用程序。然后保持互联网连接关闭,然后打开应用程序。

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

小智 1

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

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