Добавьте в приложение поддержку 5G

В Android 11 добавлена поддержка 5G в приложениях. В этой статье мы расскажем о функциях, связанных с 5G, и о том, как они могут улучшить приложение.

Оптимизация для 5G

Решая, как использовать 5G, подумайте о том, какие возможности вы хотите создать. Вот несколько примеров того, как 5G может улучшить ваше приложение:

  • Автоматически повышайте скорость и качество работы существующих функций благодаря улучшенной скорости и задержке 5G.
  • Улучшайте пользовательский опыт, например показывайте видео в формате 4K или скачивайте игровые ресурсы в более высоком разрешении.
  • Убедившись, что увеличенный объем трафика не приведет к дополнительным расходам, вы можете предложить пользователю функции, которые обычно доступны только при подключении по Wi-Fi, например упреждающее скачивание контента.
  • Предлагайте уникальные возможности, которые доступны только в сетях 5G благодаря высокой скорости и низкой задержке.

Функции 5G

В Android 11 появились следующие изменения и улучшения:

Проверить лимитированность

NET_CAPABILITY_TEMPORARILY_NOT_METERED – это функция, добавленная в Android 11. Она позволяет узнать, является ли используемая вами сеть безлимитной, на основе информации, предоставленной операторами мобильной связи.

Новый параметр используется вместе с NET_CAPABILITY_NOT_METERED. Существующий флаг указывает, является ли сеть всегда безлимитной, и применяется как к Wi-Fi, так и к передаче данных по мобильной сети.

Разница между этими двумя флагами заключается в том, что NET_CAPABILITY_TEMPORARILY_NOT_METERED может меняться без изменения типа сети. Приложения, предназначенные для Android 11, могут использовать флаг NET_CAPABILITY_TEMPORARILY_NOT_METERED. На устройствах с Android 9 и более ранними версиями ОС не будет сообщать о флаге. Для приложений, работающих на Android 10, этот флаг может быть доступен в зависимости от устройства, на котором они запущены.

Если вы определили, что текущая сеть временно или постоянно является безлимитной, вы можете показывать контент с более высоким разрешением (например, видео 4k), загружать журналы, создавать резервные копии файлов и упреждающе скачивать контент.

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

Зарегистрируйте обратный вызов сети

Зарегистрируйтесь для обратного вызова сети с помощью ConnectivityManager.registerDefaultNetworkCallback(), чтобы получать уведомления об изменении NetworkCapabilities. Вы можете отслеживать изменения в NetworkCapabilities, переопределив метод onCapabilitiesChanged() в NetworkCallback.

registerDefaultNetworkCallback() вызывает зарегистрированный обратный вызов сразу после регистрации, предоставляя приложению информацию о текущем состоянии. Обратные вызовы Future критически важны для приложений, чтобы они могли предпринять соответствующие действия, когда состояние меняется с безлимитного на лимитное или наоборот.

Проверка лимитного подключения

Используйте объект NetworkCapabilites, который вы получаете в обратном вызове сети, чтобы проверить выходные данные следующего кода:

Kotlin

NetworkCapabilities.hasCapability(NET_CAPABILITY_NOT_METERED) ||
  NetworkCapabilities.hasCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED)

Java

NetworkCapabilities.hasCapability(NET_CAPABILITY_NOT_METERED) ||
  NetworkCapabilities.hasCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED)

Если значение равно true, то сеть можно считать безлимитной.

Дополнительные сведения

При работе с этой функцией учитывайте следующее:

  • Чтобы использовать флаг NET_CAPABILITY_TEMPORARILY_NOT_METERED, необходимо скомпилировать приложение с помощью Android 11 SDK.

  • Функция NET_CAPABILITY_NOT_METERED доступна в сети постоянно. Сеть с этой возможностью будет автоматически отключена, если она потеряет эту возможность (станет лимитной).

  • В отличие от этого, NET_CAPABILITY_TEMPORARILY_NOT_METERED может меняться в сети без отключения. Поэтому приложения должны прослушивать обратный вызов onCapabilitiesChanged(), чтобы обрабатывать ситуации, когда сеть возвращается к лимитному статусу (теряет возможность NET_CAPABILITY_TEMPORARILY_NOT_METERED).

  • В сети не могут одновременно использоваться NET_CAPABILITY_NOT_METERED и NET_CAPABILITY_TEMPORARILY_NOT_METERED.

Обнаружение 5G

Начиная с Android 11 вы можете определять, подключено ли устройство к сети 5G, с помощью вызова API на основе обратного вызова. Вы можете проверить, является ли подключение сетью 5G NR (автономной) или NSA (неавтономной).

Вот несколько примеров использования этого вызова API:

  • Показ в приложении логотипа 5G, чтобы подчеркнуть, что вы предлагаете уникальные возможности 5G.

  • Активация уникальных функций 5G в приложении только при подключении к сети 5G. Эту проверку следует выполнять вместе с проверкой лимитного подключения.

  • Отслеживание подключений 5G для аналитики.

Чтобы протестировать обнаружение 5G без устройства 5G, можно использовать функции, добавленные в эмулятор Android SDK.

Обнаружение 5G

Вызовите TelephonyManager.listen(), передав LISTEN_DISPLAY_INFO_CHANGED, чтобы определить, есть ли у пользователя сетевое подключение 5G. Переопределите метод onDisplayInfoChanged(), чтобы определить тип сети, используемой для показа. Исключение: если оператор выбирает 5G в качестве RAT для своей сети mmWave, возвращается OVERRIDE_NETWORK_TYPE_NR_NSA.

В таблице ниже показано, какие сети соответствуют этим значениям.

Тип возвращаемого значения Сеть
OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO Advanced pro LTE (5Ge)
OVERRIDE_NETWORK_TYPE_NR_NSA NR (5G) для сетей 5G Sub-6;
OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE 5G+/5G UW для сетей 5G mmWave;

Оценка пропускной способности

Для оценки пропускной способности используется объект NetworkCapabilities, с которым вы работаете при определении тарификации. С помощью этого объекта можно получить оценку пропускной способности.

Надежность и точность методов оценки пропускной способности getLinkDownstreamBandwidthKbps() и getLinkUpstreamBandwidthKbps() улучшены в Android 11 благодаря обновлению поддержки фреймворка и исправлению ошибок платформы/модема для поддержки 5G.

Значения пропускной способности по умолчанию используются только при запуске приложения. Это должно помочь вам со сценарием "запуск в режиме ожидания". Приложение должно измерять то, что видит, как только пользователи начинают взаимодействовать с ним, и динамически корректировать поведение потоковой передачи. Например, вы можете выбрать разрешение видео на основе оценки пропускной способности при запуске. Продолжайте проверять оценки, пока пользователи работают с приложением. Если тип и качество подключения меняются, корректируйте поведение приложения.