我们使用Android ConnectivityManager监听应用程序内部的互联网连接变化,如下所示。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
...
ConnectionStateMonitor().enable(this)
}
class ConnectionStateMonitor : NetworkCallback() {
private val networkRequest: NetworkRequest = NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build()
fun enable(context: Context) {
val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
connectivityManager.registerNetworkCallback(networkRequest, this)
}
override fun onAvailable(network: Network) {
Log.i(TAG, "onAvailable ")
}
override fun onLost(network: Network?) {
super.onLost(network)
Log.i(TAG, "onLost ")
}
}
}除了我们遇到的两个问题外,这个实现工作得很好
onLost()回调和onAvailable(),但在其他情况下,只会触发 onLost(),这是不正确的。onLost()就不会被触发,但是如果我们有互联网连接并打开应用程序,onAvailable()就会被激活。任何帮助,建议,解决办法或其他方法,以可靠地检测互联网连接变化,将是非常感谢的。
在A2 (Android 9),OnePlus (Android 9)上进行测试
演示项目
发布于 2019-05-06 20:43:24
我使用了您的项目,并添加了另一个方法:onCapabilitiesChanged。我以电子邮件的方式开始飞行,然后关掉,然后又重新打开。这些是日志:
onAvailable 632 onCapabilitiesChanged 632传输:蜂窝. onAvailable 632 onCapabilitiesChanged 632传输:蜂窝. onAvailable 632 onCapabilitiesChanged 632传输:蜂窝. onCapabilitiesChanged 632传输:蜂窝. onCapabilitiesChanged 632传输:蜂窝. onAvailable 633 onCapabilitiesChanged 633传输: WIFIonAvailable 633 onCapabilitiesChanged 633传输: WIFI onAvailable 633 onCapabilitiesChanged 633传输: WIFI onCapabilitiesChanged 633传输: WIFI onCapabilitiesChanged 633传输: WIFI onCapabilitiesChanged 633传输: WIFI onCapabilitiesChanged 633传输: WIFI onCapabilitiesChanged 633传输: WIFI onLost 632 onLost 632 onLost 632 onLost 633 onLost 633 onLost 633 onAvailable 634 onCapabilitiesChanged 634传输:蜂窝. onAvailable 634 onCapabilitiesChanged 634传输:蜂窝. onAvailable 634 onCapabilitiesChanged 634传输:蜂窝. onCapabilitiesChanged 634传输:蜂窝. onCapabilitiesChanged 634传输:蜂窝. onCapabilitiesChanged 634传输:蜂窝. onAvailable 635 onCapabilitiesChanged 635传输: WIFI onAvailable 635 onCapabilitiesChanged 635传输: WIFI onAvailable 635 onCapabilitiesChanged 635传输: WIFI onCapabilitiesChanged 635传输: WIFI onCapabilitiesChanged 635传输: WIFI onCapabilitiesChanged 635传输: WIFI onLost 634 onLost 634 onLost 634 onCapabilitiesChanged 635传输: WIFI onCapabilitiesChanged 635传输: WIFI
如您所见,LOST用于蜂窝传输,而AVAILABLE用于WiFi
按照您的用例(启用wifi,启用移动数据,禁用wifi数据,启用wifi,禁用wifi) --这就是我得到的。
onAvailable 640 onCapabilitiesChanged 640传输:无线. onAvailable 640 onCapabilitiesChanged 640传输:无线. onCapabilitiesChanged 640传输:无线. onCapabilitiesChanged 640传输:无线. onCapabilitiesChanged 640传输:无线. onCapabilitiesChanged 640传输:无线. onLost 640 onLost 640 onAvailable 641 onCapabilitiesChanged 641传输:蜂窝. onAvailable 641 onCapabilitiesChanged 641传输:蜂窝. onCapabilitiesChanged 641传输:蜂窝. onCapabilitiesChanged 641传输:蜂窝. onAvailable 642 onCapabilitiesChanged 642传输: WIFI onAvailable 642 onCapabilitiesChanged 642传输: WIFI onCapabilitiesChanged 642传输: WIFI onCapabilitiesChanged 642传输: WIFI onCapabilitiesChanged 642传输: WIFI onCapabilitiesChanged 642传输: WIFI onLost 641 onLost 641 onLost 642 onLost 642 onAvailable 643 onCapabilitiesChanged 643传输:蜂窝. onAvailable 643 onCapabilitiesChanged 643传输:蜂窝. onCapabilitiesChanged 643传输:蜂窝. onCapabilitiesChanged 643传输:蜂窝.
发布于 2019-04-30 08:52:21
发布于 2020-06-28 09:33:58
也许您可以尝试使用requestNetwork而不是registerNetworkCallback。
https://stackoverflow.com/questions/55823422
复制相似问题