Я перемещаю проект в новейшую версию Android SDK (29), и у меня возникли проблемы с устареванием для реагирования на изменения сети в SDK версии 20 и ниже.Текущий минимальный SDK - 16.
Поскольку ConnectivityManager.CONNECTIVITY_ACTION
и NetworkInfo
устарели, я изо всех сил пытаюсь найти решение без использования устаревших функций.
Текущее решение работаетпримерно так: во фрагменте получатель зарегистрирован для IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)
.Приемник имеет следующий код:
public class NetworkBroadcastReceiver extends BroadcastReceiver {
public interface NetworkUpdatesPreApi21Listener {
void onSuccessfulConnection();
void onConnectionLost();
}
private final ConnectivityManager connectivityManager;
private final NetworkUpdatesPreApi21 listener;
public NetworkBroadcastReceiver(ConnectivityManager connectivityManager, NetworkUpdatesPreApi21Listener networkUpdatesPreApi21Listener) {
this.connectivityManager = connectivityManager;
this.listener = networkUpdatesPreApi21Listener;
}
@Override
public void onReceive(Context context, Intent intent) {
String intentAction = intent.getAction();
if (intentAction != null) {
if (intentAction.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
NetworkInfo networkInfo = ConnectivityManagerCompat.getNetworkInfoFromBroadcast(mConnectivityManager, intent);
boolean isConnected = networkInfo != null && networkInfo.isConnected();
if (isConnected) {
listener.onSuccessfulConnection();
} else {
listener.onConnectionLost();
}
}
}
}
}
Код работает, однако я хотел бы получить тот же эффект без использования устаревших функций.
Для SDK версий 21 и выше я используюNetworkCallback
с ConnectivityManager.registerNetworkCallback(NetworkRequest request, ConnectivityManager.NetworkCallback networkCallback)
, однако минимальный SKD составляет 21.
Я уже проверил документацию для Android, однако они также используют устаревшие функции.
Большое спасибо