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