В Android 12 появилась функция одновременного подключения к двум сетям Wi-Fi (STA/STA). Эта функция позволяет:
- Сначала подключение, потом отключение. Устройство подключается к новой сети Wi-Fi, прежде чем отключаться от текущей. Это позволяет более плавно переключаться между сетями Wi-Fi.
- Одновременное подключение к локальной сети и интернету. Устройство подключается к локальной сети, не прерывая основное подключение к интернету.
- Одновременное подключение к ограниченной сети и интернету. Устройство подключается к ограниченной сети (доступной только определенным привилегированным приложениям), не прерывая основное подключение к интернету.
- (Android 13 или более поздней версии) Одновременное подключение к нескольким сетям с доступом в интернет. Устройство подключается к двум сетям, которые не имеют ограничений и доступны для всех приложений, а также обеспечивают подключение к интернету.
На этой странице описано, как работает устройство, когда эта функция включена, а также приведены сведения о реализации для производителей и поставщиков устройств.
Реализация
Чтобы реализовать параллельную работу Wi-Fi STA/STA, устройства должны поддерживать следующее:
Чип или встроенное ПО Wi-Fi должны поддерживать два одновременных подключения STA. Прошивка должна поддерживать все комбинации каналов и диапазонов для обоих подключений. Чтобы избежать проблем с производительностью, рекомендуем использовать чип Wi-Fi с поддержкой DBS 2x2+2x2.
Устройство должно поддерживать следующие API в реализации AIDL или HIDL
IWifiChip.IWifiChip.setMultiStaPrimaryConnection(String ifName)IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
Комбинация интерфейсов Wi-Fi HAL должна иметь два параллельных интерфейса STA, представленных в формате спецификации, например
[{STA} <= 2, ...]. Подробнее о параллельной работе нескольких интерфейсов Wi-Fi…
Если эти требования выполнены, реализуйте параллельную работу двух подключений Wi-Fi в режиме STA, выполнив следующие действия:
Включить одну или несколько функций по отдельности с помощью наложений ресурсов времени выполнения (по умолчанию отключено).
- Подключение до отключения:
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled - Одновременное подключение к интернету и локальной сети
config_wifiMultiStaLocalOnlyConcurrencyEnabled - Одновременное использование ограниченного подключения и подключения к интернету:
config_wifiMultiStaRestrictedConcurrencyEnabled - Одновременное подключение к нескольким сетям с доступом к интернету:
config_wifiMultiStaMultiInternetConcurrencyEnabled
- Подключение до отключения:
Проверьте каждую реализацию, как описано в соответствующих разделах.
Чтобы улучшить поддержку одновременной работы двух устройств Wi-Fi STA, мы рекомендуем использовать в фреймворках и приложениях, настроенных производителем, метод NetworkCallback#onCapabilitiesChanged() вместо WifiManager#getConnectionInfo(), который возвращает WifiInfo только для одной сети и был объявлен устаревшим в Android 12. Подробную информацию можно найти в статье Wi-Fi Network Request API для одноранговых подключений.
Переключение без разрыва
Функция make-before-break позволяет устройствам подключаться к новой сети Wi-Fi, сохраняя существующее подключение к сети Wi-Fi, и отключаться от старой сети только после успешного подключения к новой сети Wi-Fi и получения доступа к интернету.
В Android 11 и более ранних версиях устройство должно отключиться от существующей сети Wi-Fi, прежде чем подключиться к новой (break-before-make). Это приводит к следующим проблемам:
При подключении к новой сети устройство может обнаружить, что сохраненный пароль сети Wi-Fi неправильный или что у новой сети нет доступа к интернету. В результате устройство переключается на старую сеть, и подключение по Wi-Fi отсутствует значительное время.
Старая сеть внезапно отключается, и все сокеты закрываются. Приложения часто плохо реагируют на внезапную потерю подключения, и это может привести к тому, что пользователь будет несколько секунд без подключения к интернету, пока новое подключение не будет полностью установлено.
Сеть по умолчанию меняется дважды: сначала со старой сети Wi-Fi на мобильную, а затем с мобильной на новую сеть Wi-Fi. Из-за этого приложения реагируют на изменения в сети дважды. Кроме того, устройство должно некоторое время использовать мобильный интернет.
Процедура "сначала создать, потом удалить" используется только для автоматического переключения между сетями Wi-Fi, инициированного ОС. При переключении сети, инициированном пользователем, используется устаревший алгоритм "сначала отключение, потом подключение", при котором предыдущая сеть полностью отключается до подключения новой. В некоторых случаях поток "сначала отключение, затем подключение" используется даже при автоматическом переключении, инициированном ОС, например при переключении между двумя сетями, в которых настроено использование заводского MAC-адреса.
Приложения могут проверить, поддерживается ли этот вариант использования на устройстве, с помощью API WifiManager#isMakeBeforeBreakWifiSwitchingSupported().
Проверка перехода на новую версию
Чтобы проверить реализацию, запустите автоматическое переключение сети Wi-Fi (убедитесь, что доступна сеть с более сильным сигналом, чем подключенная) и убедитесь, что устройство поддерживает существующее подключение при подключении к новой сети. Чтобы посмотреть статус обоих интерфейсов Wi-Fi и убедиться, что они подключены, используйте следующую команду:
adb shell wpa_cli -i wlan0 status ; echo ; adb shell wpa_cli -i wlan1 status
Если у новой сети нет подключения к интернету, устройство пытается подключиться к ней, сохраняя подключение к текущей сети, и прерывает попытку, когда обнаруживает, что у новой сети нет интернета. После этого устройство продолжит использовать существующее подключение в качестве основной сети Wi-Fi.
Одновременное подключение к интернету и локальной сети
Функция одновременного подключения только к локальной сети и подключения к интернету позволяет устройствам подключаться только к локальной сети, например к устройству IoT, одновременно с основной сетью, обеспечивающей доступ в интернет. Эта функция улучшает удобство использования при прямом подключении к устройствам IoT, таким как камеры, что возможно через API WifiNetworkSpecifier, добавленный в Android 10.
В Android 11 и более ранних версиях устройства отключаются от основной сети Wi-Fi при подключении к устройству IoT, что приводит к потере подключения к интернету (если на устройстве нет другого доступного типа транспорта, например мобильных данных).
Приложения могут проверить, поддерживается ли эта функция на устройстве, с помощью API WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported().
Подробнее об изменениях в функции одновременного подключения к локальной сети и интернету в Android 12 можно узнать в статье Wi-Fi Network Request API for peer-to-peer connectivity.
Проверьте подключение к интернету и локальной сети
Чтобы проверить эту функцию, используйте CTS-тест MultiStaConcurrencyWifiNetworkSpecifierTest.
Одновременное подключение к интернету и ограниченной сети
Функция одновременного подключения к интернету и сети с ограниченным доступом позволяет устройству одновременно подключаться к основной сети Wi-Fi для пользователя и сети Wi-Fi с ограниченным доступом, которая доступна только для определенных приложений.
Приложения могут проверить, поддерживается ли эта функция на устройстве, с помощью API WifiManager#isStaConcurrencyForRestrictedConnectionsSupported().
Чтобы разрешить устройству подключаться к дополнительным сетям Wi-Fi с ограниченным доступом, выполните следующие действия:
Добавьте предложения сетей Wi-Fi, задав для параметра
setOemPaidилиsetOemPrivateзначение true.В
ConnectivityManagerсоздайтеNetworkRequestсо следующими возможностями:NET_CAPABILITY_OEM_PAIDдляsetOemPaidNET_CAPABILITY_OEM_PRIVATEдляsetOemPrivate
Когда устройство обнаруживает результаты сканирования с сетью, соответствующей платному или частному предложению OEM, оно автоматически подключается к ней как к дополнительной сети.
Проверка одновременного использования ограниченного режима и подключения к интернету
Чтобы проверить эту функцию, используйте тест MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest CTS.
Одновременное подключение к нескольким сетям с доступом в интернет
Функция одновременного подключения к нескольким сетям с доступом к интернету позволяет устройству одновременно подключаться к двум сетям (точкам доступа), которые не имеют ограничений (все приложения имеют доступ) и предоставляют доступ к интернету. Эта функция доступна для Android 13 и более поздних версий.
Приложения могут проверить, поддерживается ли эта функция на устройстве, с помощью метода WifiManager#isStaConcurrencyForMultiInternetSupported().
Если функция поддерживается, привилегированные приложения могут включить ее с помощью метода WifiManager#setStaConcurrencyForMultiInternetMode(int mode). Доступны следующие режимы:
WifiManager#WIFI_MULTI_INTERNET_MODE_DBS_AP: Ограничивает двойные подключения двойными диапазонами точки доступа DBS.WifiManager#WIFI_MULTI_INTERNET_MODE_MULTI_AP: Подключается к произвольным точкам доступа, в которых отдельные подключения используют разные диапазоны.WifiManager#WIFI_MULTI_INTERNET_MODE_DISABLED– функция отключена.
Чтобы запросить активный режим функции, используйте метод WifiManager#getStaConcurrencyForMultiInternetMode().
Если функция включена, выполните следующие действия, чтобы запросить дополнительную сеть Wi-Fi с доступом к интернету.
Создайте спецификатор сети Wi-Fi, используя
WifiNetworkSpecifier.Builder. Выберите диапазон для спецификатора с помощью методаsetBand(). Не указывайте SSID или BSSID, поскольку дополнительная сеть для указанного диапазона выбирается фреймворком Wi-Fi.Создайте
NetworkRequestс возможностьюNET_CAPABILITY_INTERNET, используяConnectivityManager.Добавьте спецификатор в сетевой запрос вместе с экземпляром
NetworkCallback, чтобы отслеживать статус запроса, и отправьте запрос вConnectivityManager. Если в результатах сканирования есть сохраненная сеть с запрошенным диапазоном и подключение к ней выполнено успешно, для объекта обратного вызова вызывается методNetworkCallback.onAvailable().
Проверка одновременного подключения к нескольким сетям с доступом в интернет
Чтобы проверить эту функцию, используйте следующий тест CTS:
- CTS:
MultiStaConcurrencyMultiInternetWifiNetworkTest
Рекомендации по выбору чипа Wi-Fi
Поставщики чипов Wi-Fi могут использовать следующие рекомендации, чтобы обеспечить поддержку одновременной работы Wi-Fi STA/STA.
Чип Wi-Fi должен поддерживать два одновременных подключения STA. Это означает, что он поддерживает следующие функции:
- У каждого интерфейса STA есть уникальный MAC-адрес, который можно запрограммировать с помощью фреймворка.
- Дополнительный интерфейс STA можно динамически создавать и удалять.
- Каждая станция может быть подключена к разным SSID (в одном или разных диапазонах).
- Каждая станция может быть подключена к одному и тому же SSID (в одном или разных диапазонах). Две станции никогда не должны быть подключены к одному и тому же идентификатору BSSID.
Критические функции должны работать на уровне интерфейса и быть доступны в основном интерфейсе. Ниже приведен список этих важных функций.
Роуминг должен поддерживаться хотя бы на основном интерфейсе (настраивается с помощью
IWifiChip.setMultiStaPrimaryConnection()). Если роуминг поддерживается на обоих интерфейсах, решения по одному подключению не должны конфликтовать со вторым одновременным подключением. Например, один интерфейс не должен переключаться на BSSID другого подключения.APF и другие функции разгрузки, такие как ARP и NS, должны поддерживаться хотя бы на основном интерфейсе (заданном с помощью
IWifiChip.setMultiStaPrimaryConnection()).Статистика канального уровня должна работать на основе интерфейса.
Ниже приведены рекомендуемые реализации чипов Wi-Fi для различных сценариев параллельной работы.
Чип Wi-Fi должен позволять фреймворку вызывать функцию
IWifiChip.setMultiStaUseCase()с одной из следующих констант, чтобы указать текущую функцию:DUAL_STA_TRANSIENT_PREFER_PRIMARY– указывает функцию Make-Before-Break. Качество основного подключения должно быть выше, чем у резервного.DUAL_STA_NON_TRANSIENT_UNBIASED– определяет функцию одновременного подключения к локальной сети и интернету или одновременного подключения к сети с ограниченным доступом и интернету. Качество обоих подключений должно быть одинаково высоким.
Поскольку два одновременных STA могут привести к режимам работы MCC, SCC и DBS, при реализации поставщика необходимо выбрать лучшую конфигурацию радиомодуля, когда фреймворк вызывает
IWifiChip.setMultiStaUseCase(), чтобы указать функцию. Вот некоторые общие рекомендации:- Рекомендуется использовать DBS 2x2+2x2, если он доступен.
- По возможности избегайте использования 1x1+1x1 DBS, поскольку это может негативно повлиять на качество соединения. Вместо этого используйте MCC.
- Рабочий цикл MCC должен настраиваться водителем или встроенным ПО для различных функций. Фреймворк не задает рабочий цикл MCC напрямую, а запрашивает эту информацию с помощью
StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent. Если вы используете MCC, рекомендуем следующие рабочие циклы между основным и дополнительным подключениями:
DUAL_STA_TRANSIENT_PREFER_PRIMARY: 70% основного, 30% дополнительного.DUAL_STA_NON_TRANSIENT_UNBIASED: 50% основного и 50% дополнительного.