Android 12 представляет Wi-Fi STA/STA concurrency, что позволяет устройствам подключаться к двум сетям 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 Network для однорангового подключения .
Сделать-до-разрушения
Функция «замкнуть перед разрывом» позволяет устройствам подключаться к новой сети 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», где предыдущая сеть полностью отключается перед подключением новой сети. В некоторых случаях поток «break-before-make» используется даже в автоматических переключателях, инициированных ОС, например, при переключении между двумя сетями, обе из которых настроены на использование заводского 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
-
Когда устройство обнаруживает результаты сканирования с сетью, соответствующей предложению платного OEM-производителя или частного OEM-производителя, оно автоматически подключается к ней как к вторичной сети.
Проверить одновременное ограниченное и интернет-подключение
Для проверки этой функции используйте тест 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 (в пределах одного или разных диапазонов). Две 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% вторичный.
-