Это правильный способ регистрации изменений подключения в API 21 и выше.Следующий код может быть помещен в базовое действие, и таким образом вы можете ожидать, что каждый экран в вашем приложении (который наследуется от этого действия) получит эти обратные вызовы.
Сначала создайте сетевой обратный вызов, который будет отслеживать изменения подключения.
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private val networkCallback: ConnectivityManager.NetworkCallback = object : ConnectivityManager.NetworkCallback() {
// Implement the callback methods that are relevant to the actions you want to take.
// I have implemented onAvailable for connecting and onLost for disconnecting.
override fun onAvailable(network: Network?) {
super.onAvailable(network)
}
override fun onLost(network: Network?) {
super.onLost(network)
}
}
Затем зарегистрируйте и отмените регистрацию этого обратного вызова в соответствующих местах.
override fun onResume() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
val cm = getSystemService(Context.CONNECTIVITY_SERVICE) as? ConnectivityManager
cm?.registerNetworkCallback(NetworkRequest.Builder().build(), networkCallback)
}
}
И отмените регистрацию при необходимости.
override fun onPause() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
val cm = getSystemService(Context.CONNECTIVITY_SERVICE) as? ConnectivityManager
cm?.unregisterNetworkCallback(networkCallback)
}
}
Обратите внимание, что существуетпроверьте на Build.VERSION_CODES.LOLLIPOP
.Эта функциональность доступна только в Lollipop и выше.Убедитесь, что у вас есть план обработки изменений состояния сети на устройствах Pre-Lollipop, если вы поддерживаете в своем приложении менее 21 API.