Android обеспечивает поддержку точек доступа Wi-Fi (Soft AP), включая подключение через точку доступа Wi-Fi и локальные точки доступа Wi-Fi.
Функция программной точки доступа позволяет настраивать следующее:
- SSID и BSSID
- Тип безопасности (включая WPA3)
- Скрытый SSID
- Рабочий диапазон и канал (включая ACS)
- Максимальное количество разрешенных клиентов
- Значение тайм-аута автоматического выключения
- Белый и черный списки, позволяющие пользователю управлять связанными устройствами
- Уровень рандомизации MAC для BSSID точки доступа
- 802.11ax и 802.11be
Возможности устройства определяют доступность этих элементов управления. В Android 11 представлены API для реализации этих возможностей. Производители устройств также могут указывать базовые возможности устройства с помощью оверлеев.
Разработка приложений с API точек доступа
Реализацию привязанной точки доступа Wi-Fi по умолчанию обеспечивает приложение «Настройки» Android Open Source Project (AOSP), однако оно не использует все API для настройки Soft AP.
Для поддержки подключения через точку доступа или локальную точку доступа приложение должно выполнять следующие функции:
Зарегистрируйте обратный вызов, чтобы получить возможности устройства, используя
WifiManager#registerSoftApCallback
для привязанной точки доступа илиWifiManager#registerLocalOnlyHotspotSoftApCallback
для локальной точки доступа.Обратный вызов
SoftApCallback
предоставляет следующие методы:-
SoftApCallback#onCapabilityChanged
: предоставляет информацию о возможностях устройства, включая максимальное количество поддерживаемых клиентов, а также о том, поддерживаются ли SAE или ACS. -
SoftApCallback#onInfoChanged
: предоставляет информацию о работающей Soft AP (действительна только после запуска), включая информацию о диапазоне и частоте. -
SoftApCallback#onConnectedClientsChanged
: предоставляет список подключённых клиентов. Для каждого клиента можно получить MAC-адрес. Для получения информации об IP-адресе используйте обратный вызовTetheringEventCallback#onClientsChanged
. -
SoftApCallback#onStateChanged
: предоставляет обновления состояния Soft AP при ее включении и отключении. -
SoftApCallback#onBlockedClientConnecting
: предоставляет информацию о заблокированном клиенте с указанием одной из следующих причин блокировки: устройство достигло максимального количества клиентов, которое оно может поддерживать, или клиент явно не авторизован для подключения. -
SoftApCallback#onClientsDisconnected
: предоставляет список отключенных клиентов. Для каждого клиента можно узнать причину отключения.
-
Для привязанной точки доступа:
- Настройте конфигурацию программной точки доступа для модема, вызвав метод
WifiManager#setSoftApConfiguration
и предоставив экземплярSoftApConfiguration
. СоздайтеSoftApConfiguration
с помощью классаSoftApConfiguration.Builder
. - Запустите модем, вызвав метод модема в
TetheringManager#startTethering
.
Для локальной точки доступа:
- Запустите локальную точку доступа с определенной конфигурацией программной точки доступа, вызвав метод
WifiManager#startLocalOnlyHotspot
.
Внедрить списки разрешенных и заблокированных пользователей
Типичное требование оператора связи — предоставить пользователю возможность управления устройствами, которым разрешено подключаться к программной точке доступа. Для этого существует несколько механизмов:
- Ограничьте максимальное количество устройств, которые могут быть подключены к программной точке доступа, с помощью
SoftApConfiguration.Builder#setMaxNumberOfClients
. Убедитесь, что указанное число меньше максимального количества клиентов, поддерживаемого устройством. Максимальное количество можно узнать с помощьюSoftApCapability#getMaxSupportedClients
. Обеспечьте динамический контроль с помощью списков разрешений и блокировок:
- Конфигурация Soft AP по умолчанию позволяет всем устройствам подключаться к Soft AP, за исключением устройств, MAC-адреса которых добавлены в
SoftApConfiguration.Builder#setBlockedClientList
. - Если Soft AP настроен с помощью
SoftApConfiguration.Builder#setClientControlByUserEnabled( true )
, используется список разрешенных устройств.- Все устройства, MAC-адреса которых указаны в
SoftApConfiguration.Builder#setBlockedClientList
блокируются для ассоциации. - Всем устройствам, MAC-адреса которых указаны в
SoftApConfiguration.Builder#setAllowedClientList
, разрешена ассоциация. - Все остальные устройства (то есть устройства, MAC-адреса которых не указаны в списке разрешенных или заблокированных) блокируются для ассоциации, но вызывается
SoftApCallback#onBlockedClientConnecting
, что позволяет контролирующему приложению (то есть приложению «Настройки ») выполнить действие, например, запросить у пользователя подтверждение, а затем добавить устройство в список разрешенных или заблокированных в зависимости от поведения пользователя.
- Все устройства, MAC-адреса которых указаны в
Обратите внимание, что устройства могут использовать функциональность списка разрешённых устройств только в том случае, если она поддерживается на них. Вы можете проверить поддержку устройства с помощью
SoftApCapability#areFeaturesSupported( SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT )
.- Конфигурация Soft AP по умолчанию позволяет всем устройствам подключаться к Soft AP, за исключением устройств, MAC-адреса которых добавлены в
Выполнение
Для поддержки подключения через точку доступа или поддержки локальной точки доступа производители устройств должны предоставить приложение настроек, фреймворк и поддержку HAL/прошивки:
Приложение «Настройки»: приложение «Настройки» Android Open Source Project (AOSP) предоставляет базовые возможности для настройки точки доступа с помощью SSID и учётных данных безопасности. Этот код можно использовать как есть или изменить для расширения возможностей, как описано в разделе «Разработка приложений с API точек доступа» .
Фреймворк: Код фреймворка AOSP поддерживает все функции, описанные в разделе Разработка приложений с API точек доступа .
HAL/прошивка для точки доступа: либо HIDL
IHostapd.hal
версии 1.2 или выше, либо AIDLIHostapd.aidl
.
Настройка
Чтобы настроить реализацию, мы рекомендуем производителям устройств настроить следующие наложения и конфигурации оператора, которые задокументированы в packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml
:
-
config_wifiFrameworkSoftApShutDownTimeoutMilliseconds
: интервал времени ожидания выключения по умолчанию. Действует только при включённом параметреSoftApConfiguration#setAutoShutdownEnabled
. Можно переопределить с помощьюSoftApConfiguration#setShutdownTimeoutMillis
. -
config_wifiHardwareSoftapMaxClientCount
: Аппаратное ограничение на максимальное количество поддерживаемых клиентов. Максимальное количество клиентов, поддерживаемое устройством, определяется минимальным из ограничений оборудования и оператора связи (задаётся параметромCarrierConfigManager.Wifi#KEY_HOTSPOT_MAX_CLIENT_COUNT
). Окончательный результат предоставляется приложению с помощьюSoftApCapabilities#getMaxSupportedClients
. -
config_wifiSofapClientForceDisconnectSupported
: Возможность принудительного отключения клиента устройством. Требуется для включения списков разрешённых и чёрных подключений. Передаётся управляющему приложению (приложению «Настройки») черезSoftApCapabilities#areFeaturesSupported( SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT )
. - (Доступно с 13)
config_wifiSoftapPassphraseAsciiEncodableCheck
: Требуется ли, чтобы парольная фраза программной точки доступа была кодирована в формате ASCII. -
config_wifiSoftapAutoUpgradeToBridgedConfigWhenSupported
: следует ли автоматически обновлять конфигурацию настроек диапазона до двух диапазонов во время восстановления конфигурации облака, если поддерживается новое устройство. - (Доступно с версии 13)
config_wifiSoftapAutoAppendLowerBandsToBandConfigurationEnabled
: добавляет ли фреймворк автоматически нижние диапазоны к конфигурации диапазонов для избежания обработки сосуществования. -
config_wifiSoftApDynamicCountryCodeUpdateSupported
: Поддерживается ли на устройстве динамическое обновление кода страны в режиме точки доступа. - Поддержка каналов:
config_wifiSoftap2gChannelList
,config_wifiSoftap5gChannelList
,config_wifiSoftap6gChannelList
иconfig_wifiSoftap60gChannelList
. - Поддержка восстановления, указывающая, сбрасываются ли соответствующие записи к значениям по умолчанию при восстановлении конфигурации точки доступа на новом устройстве:
config_wifiSoftapResetChannelConfig
,config_wifiSoftapResetHiddenConfig
,config_wifiSoftapResetUserControlConfig
,config_wifiSoftapResetAutoShutdownTimerConfig
,config_wifiSoftapResetMaxClientSettingConfig
. Обратите внимание, что по умолчанию эти параметры установлены вtrue
, что означает, что значения сбрасываются. Это критически важно, если новое устройство не поддерживает данную конфигурацию. - Аппаратные возможности:
-
config_wifi_softap_acs_supported
-
config_wifi_softap_sae_supported
- (Доступно с 13)
config_wifiSoftapOweTransitionSupported
- (Доступно с 13)
config_wifiSoftapOweSupported
-
config_wifi_softap_ieee80211ac_supported
-
config_wifiSoftapIeee80211axSupported
- (Доступно с 13)
config_wifiSoftapIeee80211beSupported
-
config_wifiSoftapMacAddressCustomizationSupported
-
config_wifiSoftapHeSuBeamformerSupported
-
config_wifiSoftapHeSuBeamformeeSupported
-
config_wifiSoftapHeMuBeamformerSupported
-
config_wifiSoftapHeTwtSupported
-
config_wifiSoftap24ghzSupported
-
config_wifiSoftap5ghzSupported
-
config_wifiSoftap6ghzSupported
-
config_wifiSoftap60ghzSupported
-
config_wifiSoftapAcsIncludeDfs
-
Проверка
Android предоставляет набор модульных тестов и тестов Compatibility Test Suite (CTS) для проверки функции точки доступа. Функцию точки доступа также можно протестировать с помощью Vendor Test Suite (VTS).
Модульные тесты
Проверьте пакет точки доступа, используя следующие тесты.
Сервисные испытания:
atest packages/modules/Wifi/service/tests/wifitests/
Тесты менеджера:
atest packages/modules/Wifi/framework/tests/
Тесты набора тестов совместимости (CTS)
Используйте тесты CTS для проверки функции точки доступа. CTS определяет, когда функция включена, и автоматически включает соответствующие тесты.
Чтобы запустить тесты CTS, выполните:
atest android.net.wifi.cts.WifiManagerTest
Тестовый набор поставщика (VTS)
Если реализован интерфейс HIDL, выполните:
atest VtsHalWifiHostapdV1_2Target
Если интерфейс AIDL реализован, выполните:
atest VtsHalHostapdTargetTest