Wi‑Fi Aware

Die in Android 8.0 hinzugefügte Funktion Wi‑Fi Aware ermöglicht es unterstützten Geräten, sich direkt über das Wi‑Fi Aware-Protokoll zu finden, zu verbinden und die Reichweite (in Android 9 hinzugefügt) zu ermitteln, ohne auf das Internet oder ein Mobilfunknetz angewiesen zu sein. Diese Funktion basiert auf der Wi‑Fi Alliance (WFA) Wi‑Fi Aware-Spezifikation (Versionen 2.0, 3.0, 3.1 und 4.0) und ermöglicht die einfache Freigabe von Daten mit hoher Durchsatzleistung zwischen vertrauenswürdigen Geräten und Apps, die sich sonst nicht im Netzwerk befinden.

Beispiele und Quelle

Um diese Funktion zu verwenden, sollten Gerätehersteller die HAL des WLAN-Anbieters implementieren. In Android 14 und höher wird die HAL-Schnittstelle des Anbieters mit AIDL definiert. Unter Android 13 und niedriger wird die HAL-Schnittstelle des Anbieters mit HIDL definiert.

Folgen Sie der WLAN-Benutzeroberfläche, um die Wi‑Fi Aware-Funktion zu verwenden. Je nach implementierter Schnittstelle ist dies entweder:

  • AIDL: hardware/interfaces/wifi/aidl
  • HIDL: hardware/interfaces/wifi/1.2 oder höher

In der alten Wi‑Fi HAL können Sie sehen, wie sie mit den AIDL- und HIDL-Schnittstellen korreliert: hardware/libhardware_legacy/+/main/include/hardware_legacy/wifi_nan.h.

Implementierung

Gerätehersteller müssen sowohl Framework- als auch HAL-/Firmware-Unterstützung bereitstellen:

  • Framework:
    • AOSP-Code
    • Aware aktivieren: Erfordert sowohl ein Funktions- als auch ein Build-Flag
  • HAL-Unterstützung für Wi‑Fi Aware (NAN) (impliziert Firmwareunterstützung)

Um diese Funktion zu implementieren, müssen Gerätehersteller die WLAN-Schnittstelle implementieren und zwei Feature-Flags aktivieren:

  • Fügen Sie in BoardConfig.mk oder BoardConfig-common.mk in device/<oem>/<device> das folgende Flag hinzu:

    WIFI_HIDL_FEATURE_AWARE := true
    
  • Ändern Sie in device.mk unter device/<oem>/<device> die Umgebungsvariable PRODUCT_COPY_FILES so, dass sie die Unterstützung für die Funktion „WLAN-Anzeige“ enthält:

    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 umfasst die Entfernungsmessung zu Peer-Geräten mit dem IEEE 802.11mc-Protokoll, auch als Round-Trip-Time (RTT) bezeichnet. Diese Unterfunktion von Wi‑Fi Aware setzt voraus, dass das Gerät die Wi‑Fi RTT-Funktion unterstützt. Das Gerät muss also sowohl Wi‑Fi Aware als auch Wi‑Fi RTT unterstützen. Weitere Informationen finden Sie unter Wi‑Fi RTT.

Andernfalls ist alles, was für diese Funktion erforderlich ist, in AOSP enthalten.

Das Flag WIFI_HIDL_FEATURE_AWARE wird ignoriert, wenn das Flag WIFI_HAL_INTERFACE_COMBINATIONS angegeben ist. Weitere Informationen finden Sie unter Gleichzeitigkeit mit mehreren WLAN-Schnittstellen.

MAC-Adressrandomisierung

Unter Android muss die MAC-Adresse der Wi‑Fi Aware-Erkennung (NMI) und der Datenschnittstellen (NDPs) zufällig generiert werden und darf nicht mit der tatsächlichen MAC-Adresse des Geräts identisch sein. Die MAC-Adressen müssen:

  • Wird jedes Mal zufällig generiert, wenn Wi‑Fi Aware aktiviert oder wieder aktiviert wird.
  • Wenn Wi‑Fi Aware aktiviert ist, muss die MAC-Adresse in einem regelmäßigen Intervall, das durch den Parameter NanConfigRequest.macAddressRandomizationIntervalSec konfiguriert wird, zufällig generiert werden. Standardmäßig ist dies im Framework auf 30 Minuten festgelegt.

Anhalten und fortsetzen

Unter Android 14 und höher unterstützt Wi‑Fi Aware die Möglichkeit für privilegierte Apps, aktive Erkennungssitzungen (einschließlich aller mit diesen Sitzungen verknüpften Datenpfade) anzuhalten und fortzusetzen. Wenn diese Funktion unterstützt wird, können Geräte Suchsitzungen schneller fortsetzen und weniger Strom verbrauchen, da Suchsitzungen pausiert werden können.

Wenn ein Gerät diese Möglichkeit zum Pausieren und Fortsetzen unterstützt, wird die Wi‑Fi Aware-Sitzung von der Firmware pausiert, wenn eine privilegierte App die Erkennungssitzung pausiert. Wenn eine Erkennungssitzung angehalten ist, überträgt oder empfängt das Gerät keine Frames für diese Sitzung, einschließlich aller aktiven NDPs in dieser Sitzung. Wenn alle Erkennungssitzungen ausgesetzt sind, überträgt oder empfängt das Gerät keine Wi‑Fi Aware-Frames.

Wenn eine privilegierte App eine pausierte Discovery-Sitzung fortsetzt, setzt das Framework die Sitzung einschließlich aller zugehörigen NDP-Sitzungen auf den vorherigen Zustand zurück. Das Fortsetzen einer pausierten Erkennungssitzung ist schneller als das Aufrufen von Wi‑Fi Aware und das Erstellen einer neuen Erkennungssitzung.

Damit die Möglichkeit besteht, Erkennungssitzungen anzuhalten und fortzusetzen, müssen Gerätehersteller HAL- und Firmware-Support bereitstellen. Weitere Informationen finden Sie unter IWifiNanIface.java.

Gerätehersteller können die Out-of-Band-Kommunikation (z. B. BLE) verwenden, um die Suspend- und Resume-Vorgänge auf mehreren Geräten zu synchronisieren.

Zertifizierungsstufe

Android bietet eine Reihe von Unit-Tests, CTS-Tests (Compatibility Test Suite) und CTS-Verifier-Tests, um die Wi‑Fi Aware-Funktion zu validieren. Wi‑Fi Aware kann auch mit der Vendor Test Suite (VTS) getestet werden.

Unit tests

Die Wi‑Fi Aware-Pakettests werden mit folgenden Tools ausgeführt:

Diensttests:

atest com.android.server.wifi.aware

Manager tests:

atest android.net.wifi.aware

Compatibility Test Suite (CTS)-Tests

Verwenden Sie CTS-Tests, um die Wi‑Fi Aware-Funktion zu validieren. CTS erkennt, wenn die Funktion aktiviert ist, und schließt die zugehörigen Tests automatisch ein.

Die CTS-Tests können mit folgenden Methoden ausgelöst werden:

atest SingleDeviceTest

CTS-Verifier-Tests

Bei CTS Verifier-Tests wird das Verhalten von Wi‑Fi Aware mit zwei Geräten validiert: einem Testgerät und einem bekannten fehlerfreien Gerät. Öffnen Sie zum Ausführen der Tests den CTS Verifier und gehen Sie zum Abschnitt „Wi‑Fi Aware-Tests“.