【发布时间】:2019-09-13 08:37:40
【问题描述】:
我们使用 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 ")
}
}
}
除了我们遇到的两个问题之外,此实现运行良好
如果我们同时使用 wifi 和移动数据连接到互联网并关闭 wifi,有时会触发
onLost()回调,然后触发onAvailable(),正如预期的那样,但在其他情况下仅onLost()被触发,这是不正确的。如果我们没有互联网连接并打开应用程序
onLost()不会触发,但是如果我们有互联网连接并打开应用程序onAvailable()会触发。
任何帮助、建议、解决方法或其他可靠地检测互联网连接变化的方法都将非常感激。
在小米 A2 (Android 9)、一加 (Android 9) 上测试
演示项目
https://github.com/PhanVanLinh/AndroidNetworkChangeReceiver
【问题讨论】:
-
您找到解决第二个问题的方法了吗?
-
不,我找不到答案,所以我从我的应用程序中删除了这个功能。我还在寻找解决方案
标签: android android-connectivitymanager