В Android 12 реализована параллельная работа Wi-Fi STA/STA, которая позволяет устройствам одновременно подключаться к двум сетям Wi-Fi. Эта дополнительная функция включает следующие функции.
- Make-before-break : устройство устанавливает соединение с новой сетью 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)
-
Комбинация интерфейсов HAL Wi-Fi должна иметь два одновременных интерфейса STA, представленных с использованием формата спецификации, такого как
[{STA} <= 2, ...]
. Дополнительные сведения см. в разделе Параллелизм нескольких интерфейсов Wi-Fi .
Если эти предварительные условия соблюдены, реализуйте параллелизм Wi-Fi STA/STA, выполнив следующие действия:
Включите одну или несколько функций по отдельности, используя наложения ресурсов среды выполнения (по умолчанию отключено).
- Сделать перед разрывом :
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
- Одновременное локальное подключение и подключение к Интернету :
config_wifiMultiStaLocalOnlyConcurrencyEnabled
- Одновременное ограничение и подключение к Интернету :
config_wifiMultiStaRestrictedConcurrencyEnabled
- Одновременная работа в нескольких сетях с подключением к Интернету :
config_wifiMultiStaMultiInternetConcurrencyEnabled
- Сделать перед разрывом :
Проверьте каждую реализацию, как описано в соответствующих разделах.
Чтобы лучше поддерживать параллелизм Wi-Fi STA/STA, мы рекомендуем, чтобы платформы и приложения, настроенные OEM, использовали метод NetworkCallback#onCapabilitiesChanged()
вместо WifiManager#getConnectionInfo()
, который возвращает WifiInfo
только для одной сети и устарел в Android 12. Дополнительную информацию см. в разделе API запроса сети Wi-Fi для однорангового подключения .
Сделать перед разрушением
Функция make-before-break позволяет устройствам подключаться к новой сети 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 для однорангового подключения .
Проверка локального подключения и подключения к Интернету
Чтобы проверить эту функцию, используйте тест MultiStaConcurrencyWifiNetworkSpecifierTest
CTS.
Одновременное ограничение и подключение к Интернету
Функция одновременного ограничения и подключения к Интернету позволяет устройству одновременно подключаться к основной сети 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
-
Когда устройство обнаруживает результаты сканирования в сети, соответствующей платной OEM-сети или частному предложению OEM-производителя, оно автоматически подключается к ней как к вторичной сети.
Проверка одновременного ограниченного подключения и подключения к Интернету
Чтобы проверить эту функцию, используйте тест MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
CTS.
Одновременная работа в нескольких сетях с подключением к Интернету
Доступная для Android 13 или более поздней версии функция одновременного использования нескольких сетей с подключением к Интернету позволяет устройству одновременно подключаться к двум сетям (AP), обе из которых являются неограниченными (все приложения имеют доступ) и обеспечивают доступ в Интернет.
Приложения могут проверить, поддерживается ли эта функция на устройстве, с помощью метода 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 (либо в том же диапазоне, либо в другом диапазоне). Две STA никогда не должны быть подключены к одному и тому же 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()
для указания функции. Ниже приведены общие рекомендации:- 2x2+2x2 DBS предпочтительнее, если доступно.
- По возможности избегайте 1x1+1x1 DBS из-за чрезмерного влияния на качество соединения. Вместо этого отдайте предпочтение MCC.
- Рабочий цикл MCC должен настраиваться драйвером или микропрограммой для различных функций. Платформа не устанавливает рабочий цикл MCC напрямую, а запрашивает эту информацию с помощью
StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent
. При использовании MCC мы рекомендуем следующие рабочие циклы между первичным и вторичным соединениями:
-
DUAL_STA_TRANSIENT_PREFER_PRIMARY
: 70 % основной, 30 % вторичный. -
DUAL_STA_NON_TRANSIENT_UNBIASED
: 50% первичный, 50% вторичный.
-