互联网关闭时无法获得回调,然后应用程序在 NetworkCallback 内启动
Posted
技术标签:
【中文标题】互联网关闭时无法获得回调,然后应用程序在 NetworkCallback 内启动【英文标题】:Unable to get callback when internet is off and then app starts inside NetworkCallback 【发布时间】:2020-05-15 19:46:21 【问题描述】:根据官方文档,由于 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)
连接在线时注册这个回调很好用,但是断网后注册回调就不行了。为了测试这样的场景,我关闭了我的应用程序。然后关闭互联网连接,然后打开应用程序。
我们有什么方法可以知道应用程序正在打开吗?如果有,请帮忙分享一下。谢谢。
【问题讨论】:
在 onStart() 中执行 registerNetworkCallback(...) 并在 onStop() 中执行 unregisterNetworkCallback(...) 另外,重写onUnavailable(),确认注册/注销是否到位。 【参考方案1】:根据您的问题,我建议您阅读 Android 文档的这一部分。您正在使用 onPause() 和 onResume(),您应该尝试 onStop()。
但我认为你必须在你的逻辑connectivityManager.unregisterNetworkCallback(networkCallback)之后调用super.onPause() 因为它会在你的方法被调用之前暂停应用程序。
【讨论】:
我在这里添加了示例代码,但问题是当互联网连接关闭然后用户打开应用程序时,当时没有获得连接状态。 你应该检查你的连接管理器是否仍然存在,同样的 onResume() 尝试将 super.onResume() 放在你的逻辑之下。 如果连接状态可用,您可以尝试检查恢复,如果没有尝试再次注册网络回调,如果这无助于尝试获取 ConnectivityManager 的新实例。【参考方案2】:override func onUnavailable()
println("onUnavailable")
这个方法永远不会被调用。
【讨论】:
以上是关于互联网关闭时无法获得回调,然后应用程序在 NetworkCallback 内启动的主要内容,如果未能解决你的问题,请参考以下文章
应用程序关闭时如何接收 Android Nougat 网络丢失的回调?
asihttp 使用 POST 方法并将 nsMutabledata 发布到 uri,为啥我无法获得 asi 委托回调?