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