Функция Wi-Fi Aware, добавленная в Android 8.0, позволяет поддерживаемым устройствам обнаруживать друг друга, подключаться друг к другу и определять расстояние между ними (добавлено в Android 9) напрямую с помощью протокола Wi-Fi Aware без доступа к интернету или мобильной сети. Эта функция, основанная на спецификации Wi-Fi Aware (версии 2.0, 3.0, 3.1 и 4.0) Wi-Fi Alliance (WFA), позволяет обмениваться данными с высокой пропускной способностью между надежными устройствами и приложениями, которые не подключены к сети.
Подробное описание архитектуры Wi-Fi Aware в Android 17 и более поздних версий приведено в статье Архитектура Wi-Fi Aware.
Примеры и источник
Чтобы использовать эту функцию, производители устройств должны реализовать Wi-Fi Vendor HAL. В Android 14 и более поздних версиях интерфейс Vendor HAL определяется с помощью AIDL. Для Android 13 и более ранних версий интерфейс Vendor HAL определяется с помощью HIDL.
Чтобы использовать функцию Wi-Fi Aware, следуйте инструкциям в интерфейсе Wi-Fi. В зависимости от того, какой интерфейс реализован, это может быть:
- AIDL:
hardware/interfaces/wifi/aidl - HIDL:
hardware/interfaces/wifi/1.2или более поздняя версия.
Вы можете обратиться к устаревшему Wi-Fi HAL, чтобы увидеть, как он соотносится с интерфейсами AIDL и HIDL: hardware/libhardware_legacy/+/android17-release/include/hardware_legacy/wifi_nan.h.
Реализация
Производители устройств должны обеспечить поддержку как фреймворка, так и HAL/встроенного ПО:
- Фреймворк:
- Код Android Open Source Project (AOSP)
- Включить Aware: требуется флаг функции и флаг сборки.
- Поддержка Wi-Fi Aware (NAN) HAL (что подразумевает поддержку встроенного ПО).
Чтобы реализовать эту функцию, производители устройств должны внедрить интерфейс Wi-Fi и включить два флага функции:
В файле
BoardConfig.mkилиBoardConfig-common.mk, расположенном в каталогеdevice/<oem>/<device>, добавьте следующий флаг:WIFI_HIDL_FEATURE_AWARE := trueВ файле
device.mk, который находится в каталогеdevice/<oem>/<device>, измените переменную средыPRODUCT_COPY_FILES, чтобы включить поддержку функции Wi-Fi Aware:PRODUCT_COPY_FILES += frameworks/native/data/etc/android.hardware.wifi.aware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.aware.xml
Wi-Fi Aware позволяет определять расстояние до одноранговых устройств с помощью протокола IEEE 802.11mc, также известного как Round Trip Time (RTT). Эта функция Wi-Fi Aware зависит от того, поддерживает ли устройство Wi-Fi RTT. То есть для ее работы необходима поддержка и Wi-Fi Aware, и Wi-Fi RTT. Подробнее о Wi-Fi RTT…
В противном случае все необходимое для этой функции включено в AOSP.
Флаг WIFI_HIDL_FEATURE_AWARE игнорируется, если указан флаг WIFI_HAL_INTERFACE_COMBINATIONS. Подробнее о многоинтерфейсном режиме Wi-Fi…
Случайное назначение MAC-адреса
В Android MAC-адрес интерфейсов обнаружения Wi-Fi Aware (NMI) и передачи данных (NDP) должен быть случайным и не совпадать с реальным MAC-адресом устройства. MAC-адреса должны соответствовать следующим требованиям:
- Случайный, когда Wi-Fi Aware включен или снова включен.
Если функция Wi-Fi Aware включена, MAC-адрес должен случайным образом меняться через регулярные интервалы, заданные параметром
NanConfigRequest.macAddressRandomizationIntervalSec. По умолчанию фреймворк задает значение 30 минут.
приостанавливать и возобновлять работу;
В Android 14 и более поздних версий приложения с привилегиями могут приостанавливать и возобновлять активные сеансы обнаружения Wi-Fi Aware (включая все пути передачи данных, связанные с этими сеансами). Поддержка этой возможности позволяет устройствам быстрее возобновлять сеансы обнаружения и потреблять меньше энергии, поскольку сеансы обнаружения можно приостанавливать.
Если устройство поддерживает приостановку и возобновление, встроенное ПО приостанавливает сеанс Wi-Fi Aware, когда привилегированное приложение приостанавливает сеанс обнаружения. Когда сеанс обнаружения приостановлен, устройство не передает и не получает никаких фреймов для этого сеанса, включая любые активные NDP в этом сеансе. Если все сеансы обнаружения приостановлены, устройство не передает и не получает фреймы Wi-Fi Aware.
Когда привилегированное приложение возобновляет приостановленный сеанс обнаружения, фреймворк возвращает сеанс в предыдущее состояние, включая все связанные сеансы NDP. Возобновить приостановленный сеанс обнаружения быстрее, чем запустить Wi-Fi Aware и создать новый сеанс.
Чтобы поддерживать возможность приостановки и возобновления сеансов обнаружения, производители устройств должны обеспечить поддержку HAL и встроенного ПО. Подробную информацию можно найти в статье IWifiNanIface.java.
Производители устройств могут использовать внеполосную связь (например, BLE) для синхронизации перехода в спящий режим и выхода из него на нескольких устройствах.
Проверка
В Android есть набор модульных тестов, тестов Compatibility Test Suite (CTS) и тестов CTS Verifier, которые позволяют проверить функцию Wi-Fi Aware. Проверить Wi-Fi Aware можно также с помощью набора тестов поставщика (VTS).
Модульные тесты
Тесты пакета Wi-Fi Aware выполняются с использованием:
Тестирование сервисов:
atest com.android.server.wifi.awareТесты в управляющем аккаунте:
atest android.net.wifi.awareТесты Compatibility Test Suite (CTS)
Используйте тесты CTS, чтобы проверить функцию Wi-Fi Aware. CTS определяет, когда функция включена, и автоматически добавляет связанные с ней тесты.
Тесты CTS можно запустить с помощью:
atest SingleDeviceTestТесты CTS Verifier
Тесты CTS Verifier проверяют работу Wi-Fi Aware с помощью двух устройств: тестового и исправного. Чтобы запустить тесты, откройте CTS Verifier и перейдите в раздел Wi-Fi Aware Tests (Тесты Wi-Fi Aware).