В Android 12 появилась функция одновременного подключения Wi-Fi STA/STA, позволяющая устройствам подключаться к двум сетям Wi-Fi одновременно. Эта дополнительная функция обеспечивает следующие возможности:
- Принцип «сначала подключись, потом разорви»: устройство сначала устанавливает соединение с новой сетью Wi-Fi, а затем разрывает существующее. Это обеспечивает более плавный переход при переключении между сетями Wi-Fi.
- Одновременное подключение только к локальной сети и к интернету: устройство подключается к локальной сети, не прерывая основное интернет-соединение устройства.
- Одновременное подключение к ограниченной сети и к интернету: устройство подключается к сети с ограниченным доступом (доступной только для определенных привилегированных приложений), не прерывая основное интернет-соединение устройства.
- (Android 13 или выше) Одновременная работа с несколькими сетями и подключением к интернету: устройство подключается к двум сетям, обе из которых не имеют ограничений и доступны для всех приложений, обеспечивая подключение к интернету.
На этой странице описано поведение устройства при включении этой функции, а также подробности реализации для производителей и поставщиков устройств.
Выполнение
Для реализации одновременной работы Wi-Fi STA/STA устройства должны поддерживать следующие функции:
Wi-Fi-чип или микропрограмма должны поддерживать два одновременных подключения STA. Микропрограмма должна поддерживать все комбинации каналов и диапазонов для обоих подключений. Во избежание проблем с производительностью мы рекомендуем использовать Wi-Fi-чип с поддержкой 2x2+2x2 DBS.
Устройство должно поддерживать следующие API в реализации AIDL или HIDL протокола
IWifiChip.-
IWifiChip.setMultiStaPrimaryConnection(String ifName) -
IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
-
Для комбинации интерфейсов Wi-Fi HAL необходимо наличие двух одновременно доступных интерфейсов STA, отображаемых в формате спецификации, например,
[{STA} <= 2, ...]. Дополнительную информацию см. в разделе «Многоинтерфейсная параллельность Wi-Fi» .
Если эти предварительные условия выполнены, реализуйте одновременную работу Wi-Fi STA/STA, выполнив следующие действия:
Включите одну или несколько функций по отдельности, используя наложения ресурсов среды выполнения (по умолчанию отключено).
- Функция Make-before-break:
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled - Одновременное подключение только к локальной сети и к интернету:
config_wifiMultiStaLocalOnlyConcurrencyEnabled - Ограничение одновременного подключения к интернету:
config_wifiMultiStaRestrictedConcurrencyEnabled - Одновременное подключение нескольких сетей к интернету:
config_wifiMultiStaMultiInternetConcurrencyEnabled
- Функция Make-before-break:
Проверьте каждую реализацию в соответствии с описанием в соответствующих разделах.
Для лучшей поддержки параллельного подключения Wi-Fi STA/STA мы рекомендуем разработчикам и приложениям использовать метод NetworkCallback#onCapabilitiesChanged() вместо WifiManager#getConnectionInfo() , который возвращает WifiInfo только для одной сети и был объявлен устаревшим в Android 12. Для получения дополнительной информации см. API запросов Wi-Fi для однорангового подключения .
сделать перед перерывом
Функция «подключение перед отключением» позволяет устройствам подключаться к новой сети Wi-Fi, сохраняя при этом существующее соединение с существующей сетью Wi-Fi, и отключаться от старой сети только после успешного подключения к новой сети Wi-Fi и наличия доступа в интернет.
В Android 11 и более ранних версиях используется сценарий "сначала отключись, потом отключись", который решает следующие проблемы: устройство должно отключиться от существующей сети Wi-Fi перед подключением к новой сети (режим "разъедини, потом отключи").
При подключении к новой сети устройство может обнаружить, что у него сохранен неверный пароль от 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 см. API запросов Wi-Fi для однорангового подключения .
Проверьте подключение только к локальной сети и к интернету.
Для проверки этой функции используйте тест CTS MultiStaConcurrencyWifiNetworkSpecifierTest .
Одновременное ограниченное и интернет-соединение.
Функция одновременного ограниченного подключения к сети и подключения к интернету позволяет устройству одновременно подключаться к основной сети Wi-Fi для пользователя и к ограниченной сети Wi-Fi, доступной только для определенных приложений.
Приложения могут проверить, поддерживается ли эта функция на устройстве, используя API WifiManager#isStaConcurrencyForRestrictedConnectionsSupported() .
Чтобы устройство могло подключаться к дополнительным сетям Wi-Fi с ограниченным доступом, выполните следующие действия:
Добавьте предложения по сетям Wi-Fi, установив для
setOemPaidилиsetOemPrivateзначение true.В
ConnectivityManagerотправьте запросNetworkRequestс соответствующими правами доступа:-
NET_CAPABILITY_OEM_PAIDдляsetOemPaid -
NET_CAPABILITY_OEM_PRIVATEдляsetOemPrivate
-
Когда устройство обнаруживает результаты сканирования сети, соответствующей платной или частной рекомендации производителя, оно автоматически подключается к ней в качестве дополнительной сети.
Проверка одновременного ограниченного и интернет-соединения.
Для проверки этой функции используйте тест CTS MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest .
Одновременное подключение нескольких сетей к интернету.
Функция одновременного подключения к нескольким сетям с доступом в интернет, доступная для 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.С помощью
ConnectivityManagerсоздайтеNetworkRequestс возможностьюNET_CAPABILITY_INTERNET.Добавьте спецификатор к сетевому запросу вместе с экземпляром
NetworkCallbackдля отслеживания статуса запроса и отправьте запрос вConnectivityManager. Если в результатах сканирования доступна сохраненная сеть с запрошенным диапазоном частот, и соединение с сетью установлено успешно, вызываетсяNetworkCallback.onAvailable()для объекта обратного вызова.
Проверка одновременной работы нескольких сетей с подключением к интернету.
Для проверки этой функции используйте следующий тест CTS:
- CTS:
MultiStaConcurrencyMultiInternetWifiNetworkTest
Рекомендации производителей по использованию Wi-Fi-чипов
Производителям микросхем Wi-Fi рекомендуется использовать следующие рекомендации для поддержки одновременной работы Wi-Fi STA/STA.
Wi-Fi-чип должен поддерживать одновременное подключение двух STA-устройств. Это означает, что он поддерживает следующее:
- Каждый интерфейс STA имеет уникальный MAC-адрес, программируемый с помощью фреймворка.
- Вторичный интерфейс STA может динамически создаваться и уничтожаться.
- Каждая станция (STA) может быть подключена к разным SSID (как в пределах одного диапазона, так и в разных диапазонах).
- Каждая станция (STA) может быть подключена к одному и тому же SSID (как в одном, так и в разных диапазонах). Две станции ни в коем случае не должны быть подключены к одному и тому же BSSID.
Критически важные функции должны работать на уровне каждого интерфейса и быть доступны на основном интерфейсе. Ниже приведён список этих критически важных функций:
Роуминг должен поддерживаться как минимум на основном интерфейсе (устанавливается с помощью
IWifiChip.setMultiStaPrimaryConnection()). Если роуминг поддерживается на обоих интерфейсах, решения по одному соединению не должны конфликтовать со вторым одновременным соединением. Например, один интерфейс не должен переключаться на BSSID другого соединения.Поддержка APF (и других функций разгрузки, таких как ARP и NS) должна быть обеспечена как минимум на основном интерфейсе (это устанавливается с помощью
IWifiChip.setMultiStaPrimaryConnection()).Статистика канального уровня должна обрабатываться для каждого интерфейса в отдельности.
Ниже приведены рекомендуемые варианты реализации Wi-Fi-чипов для различных сценариев параллельной обработки данных:
Wi-Fi-чип должен позволять фреймворку вызывать
IWifiChip.setMultiStaUseCase()с одной из следующих констант для указания текущей функции:-
DUAL_STA_TRANSIENT_PREFER_PRIMARY: Задает функцию «Замыкание перед разрывом». Качество основного соединения должно иметь приоритет над качеством вторичного соединения. -
DUAL_STA_NON_TRANSIENT_UNBIASED: Задает одновременный режим подключения только к локальной сети и к интернету или одновременный режим подключения к сети с ограниченным доступом и к интернету . Качество обоих подключений должно иметь одинаковый приоритет.
-
Поскольку одновременное использование двух STA может приводить к режимам работы MCC, SCC и DBS, реализация от производителя должна выбрать наилучшую конфигурацию радиомодуля, когда платформа вызывает функцию
IWifiChip.setMultiStaUseCase()для указания этой функции. Ниже приведены общие рекомендации:- Предпочтительно наличие скрининга на рак предстательной железы (DBS) 2x2+2x2, если таковой имеется.
- По возможности избегайте использования 1x1+1x1 DBS из-за чрезмерного ухудшения качества связи. Вместо этого отдавайте предпочтение MCC.
- Рабочий цикл MCC должен быть настраиваемым драйвером или встроенным ПО для различных функций. Платформа не устанавливает рабочий цикл MCC напрямую, а запрашивает эту информацию с помощью
StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent. При использовании распределительного щита мы рекомендуем следующие рабочие циклы между основным и резервным соединениями:
-
DUAL_STA_TRANSIENT_PREFER_PRIMARY: 70% основной, 30% дополнительный. -
DUAL_STA_NON_TRANSIENT_UNBIASED: 50% основной, 50% вторичный.
-