Понимание устаревшей NetworkInfo и изучение альтернативных методов сетевого подключения в Android

В мире разработки Android крайне важно быть в курсе последних изменений и лучших практик. Одним из таких изменений, о котором необходимо знать разработчикам, является прекращение поддержки класса NetworkInfo, который обычно использовался для проверки состояния сетевого подключения. В этой статье мы выясним, почему NetworkInfo устарела, и обсудим альтернативные методы с примерами кода для управления сетевым подключением в приложениях Android.

Почему NetworkInfo устарел?
Класс NetworkInfo был частью платформы Android и предоставлял информацию о состоянии сетевого подключения. Однако с выпуском Android 10 (уровень API 29) и более поздних версий класс NetworkInfo устарел. Это прекращение поддержки в основном связано с введением новых сетевых API, которые предлагают большую гибкость и расширенные функциональные возможности.

Альтернативные методы подключения к сети:

  1. ConnectivityManager:
    Класс ConnectivityManager заменяет NetworkInfo. Это позволяет вам получать информацию, связанную с сетью, и отслеживать изменения в сети. Вот пример использования класса ConnectivityManager для проверки сетевого подключения:
ConnectivityManager connectivityManager =
    (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkCapabilities networkCapabilities =
    connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork());
if (networkCapabilities != null &&
    networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)) {
    // Network is available
} else {
    // No network available
}
  1. NetworkCallback:
    Класс NetworkCallback предоставляет способ регистрации обратных вызовов для событий, связанных с сетью. Это позволяет динамически отслеживать изменения состояния сети. Вот пример использования NetworkCallback:
ConnectivityManager connectivityManager =
    (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest networkRequest = new NetworkRequest.Builder()
    .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
    .build();
ConnectivityManager.NetworkCallback networkCallback =
    new ConnectivityManager.NetworkCallback() {
        @Override
        public void onAvailable(Network network) {
            // Network is available
        }

        @Override
        public void onLost(Network network) {
            // Network is lost
        }
    };
connectivityManager.registerNetworkCallback(networkRequest, networkCallback);
  1. BroadcastReceiver:
    Вы также можете использовать BroadcastReceiver для прослушивания изменений сетевого подключения. Такой подход позволяет получать общесистемные широковещательные события при изменении состояния сети. Вот пример:
public class NetworkChangeReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        ConnectivityManager connectivityManager =
            (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
        if (networkInfo != null && networkInfo.isConnected()) {
            // Network is available
        } else {
            // No network available
        }
    }
}

В этой статье мы рассмотрели устаревание класса NetworkInfo и обсудили альтернативные методы управления сетевым подключением в приложениях Android. Мы рассмотрели использование ConnectivityManager, NetworkCallback и BroadcastReceiver, а также примеры кода. Используя эти альтернативные методы, вы можете быть уверены, что ваши приложения обновлены и совместимы с последними версиями Android.

Не забудьте обновить свою кодовую базу и отказаться от устаревшего класса NetworkInfo, чтобы избежать проблем совместимости в будущем.