Сетевые обновления для SDK версий 16-20 - PullRequest
0 голосов
/ 23 сентября 2019

Я перемещаю проект в новейшую версию 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, однако они также используют устаревшие функции.

Большое спасибо

...