我们使用 AndroidConnectivityManager
来监听我们应用程序内的互联网连接变化,如下所示。
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