Nhận biết Wi-Fi

Tính năng Nhận biết Wi-Fi được thêm vào Android 8.0 cho phép các thiết bị hỗ trợ khám phá, kết nối và kết nối (được thêm vào Android 9) với nhau trực tiếp bằng giao thức Nhận biết Wi-Fi mà không cần quyền truy cập Internet hoặc mạng di động. Tính năng này, được xây dựng dựa trên Wi-Fi Alliance (WFA) thông số kỹ thuật Nhận biết Wi-Fi (phiên bản 2.0, 3.0, 3.1 và 4.0), cho phép dễ dàng chia sẻ dữ liệu giữa các thiết bị có công suất cao và dữ liệu ngoại tuyến.

Ví dụ và nguồn

Để sử dụng tính năng này, nhà sản xuất thiết bị nên triển khai HAL của nhà cung cấp Wi-Fi. Trên Android 14 trở lên, giao diện HAL của nhà cung cấp được xác định bằng AIDL. Đối với Android 13 trở xuống, giao diện HAL của nhà cung cấp được xác định bằng HIDL.

Làm theo giao diện Wi-Fi để triển khai tính năng Nhận biết Wi-Fi. Tuỳ thuộc vào giao diện được triển khai, có thể là:

  • AIDL: hardware/interfaces/wifi/aidl
  • HIDL: hardware/interfaces/wifi/1.2 trở lên

Bạn có thể tham khảo HAL Wi-Fi cũ để xem mối tương quan giữa mạng này với giao diện AIDL và HIDL: hardware/libhardware_legacy/+/main/include/hardware_legacy/wifi_nan.h.

Triển khai

Nhà sản xuất thiết bị cần cung cấp cả khung và hỗ trợ HAL/phần mềm cơ sở:

  • Khung:
    • Mã AOSP (Dự án nguồn mở Android)
    • Bật tính năng Nhận biết: Yêu cầu cả cờ tính năng và cờ bản dựng
  • Hỗ trợ lớp trừu tượng phần cứng (HAL) cho tính năng Nhận biết Wi-Fi (NAN) (ngụ ý là hỗ trợ chương trình cơ sở)

Để triển khai tính năng này, nhà sản xuất thiết bị sẽ triển khai giao diện Wi-Fi và bật 2 cờ tính năng:

  • Trong BoardConfig.mk hoặc BoardConfig-common.mk nằm trong device/<oem>/<device>, hãy thêm cờ sau:

    WIFI_HIDL_FEATURE_AWARE := true
    
  • Trong device.mk nằm trong device/<oem>/<device>, hãy sửa đổi biến môi trường PRODUCT_COPY_FILES để thêm tính năng hỗ trợ cho tính năng Nhận biết Wi-Fi:

    PRODUCT_COPY_FILES +=
    frameworks/native/data/etc/android.hardware.wifi.aware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.aware.xml
    

Tính năng Nhận biết Wi-Fi bao gồm tính năng kết nối đến các thiết bị ngang hàng sử dụng giao thức IEEE 802.11mc, còn gọi là Thời gian trọn vòng (RTT). Tính năng phụ này của tính năng Nhận biết Wi-Fi sẽ có điều kiện trên thiết bị hỗ trợ tính năng Tin nhắn theo thời gian thực (RTT) của Wi-Fi, nghĩa là tính năng này yêu cầu thiết bị phải hỗ trợ cả tính năng Nhận biết Wi-Fi và Tin nhắn theo thời gian thực Wi-Fi. Để biết thêm thông tin, hãy xem phần Tin nhắn theo thời gian thực (RTT) của Wi-Fi.

Nếu không, mọi thứ cần thiết cho tính năng này sẽ được đưa vào AOSP.

Cờ WIFI_HIDL_FEATURE_AWARE bị bỏ qua nếu cờ WIFI_HAL_INTERFACE_COMBINATIONS được chỉ định. Để biết thêm thông tin, hãy xem phần Tính năng đồng thời nhiều giao diện Wi-Fi.

Sắp xếp ngẫu nhiên MAC

Android yêu cầu địa chỉ MAC của tính năng khám phá Wi-Fi nhận biết (NMI) và giao diện dữ liệu (NDP) phải ngẫu nhiên và không giống với địa chỉ MAC thực của thiết bị. Địa chỉ MAC phải:

  • Sắp xếp ngẫu nhiên bất cứ khi nào tính năng Nhận biết Wi-Fi được bật hoặc bật lại.
  • Khi bật tính năng Nhận biết Wi-Fi, địa chỉ MAC phải được chọn ngẫu nhiên theo một khoảng thời gian thông thường do tham số NanConfigRequest.macAddressRandomizationIntervalSec định cấu hình. Theo mặc định, thời lượng này được khung định cấu hình là 30 phút.

Suspend và resume

Trên Android 14 trở lên, tính năng Nhận biết Wi-Fi hỗ trợ khả năng các ứng dụng có đặc quyền tạm ngưng và tiếp tục các phiên khám phá đang hoạt động (bao gồm mọi đường dẫn dữ liệu liên kết với các phiên đó). Khi hỗ trợ tính năng này, thiết bị có thể tiếp tục các phiên khám phá nhanh hơn và sử dụng ít pin hơn vì các phiên khám phá có thể bị tạm ngưng.

Nếu một thiết bị hỗ trợ khả năng tạm ngưng và tiếp tục này, thì chương trình cơ sở sẽ tạm ngưng phiên Nhận biết Wi-Fi khi một ứng dụng có đặc quyền tạm ngưng phiên khám phá. Khi phiên khám phá ở trạng thái tạm ngưng, thiết bị sẽ không truyền hoặc nhận bất kỳ khung hình nào cho phiên đó, bao gồm cả mọi NDP đang hoạt động trong phiên đó. Nếu tất cả các phiên khám phá đều bị tạm ngưng, thì thiết bị sẽ không truyền hoặc nhận bất kỳ khung hình Nhận biết Wi-Fi nào.

Khi một ứng dụng đặc quyền tiếp tục phiên khám phá bị tạm ngưng, khung sẽ trả phiên đó về trạng thái trước đó, bao gồm tất cả các phiên NDP được liên kết. Việc tiếp tục phiên khám phá bị tạm ngưng sẽ nhanh hơn việc kích hoạt tính năng Nhận biết Wi-Fi và tạo phiên khám phá mới.

Để hỗ trợ khả năng tạm ngưng và tiếp tục các phiên khám phá, nhà sản xuất thiết bị phải cung cấp dịch vụ hỗ trợ lớp trừu tượng phần cứng (HAL) và chương trình cơ sở. Để biết thông tin chi tiết, hãy xem IWifiNanIface.java.

Nhà sản xuất thiết bị có thể sử dụng hoạt động giao tiếp ngoài băng tần (ví dụ: BLE) để đồng bộ hoá việc tạm ngưng và tiếp tục trên nhiều thiết bị.

Xác nhận kết quả

Android cung cấp một tập hợp các bài kiểm thử đơn vị, bài kiểm thử Bộ kiểm tra tính tương thích (CTS) và quy trình kiểm thử CTS Verifier để xác thực tính năng Nhận biết Wi-Fi. Bạn cũng có thể kiểm tra tính năng Nhận biết Wi-Fi bằng Bộ kiểm tra nhà cung cấp (VTS).

Kiểm thử đơn vị

Các hoạt động kiểm tra gói Nhận biết Wi-Fi được thực thi bằng:

Kiểm thử dịch vụ:

atest com.android.server.wifi.aware

Thử nghiệm dành cho người quản lý:

atest android.net.wifi.aware

Các bài kiểm tra Bộ kiểm tra tính tương thích (CTS)

Sử dụng thử nghiệm CTS để xác thực tính năng Nhận biết Wi-Fi. CTS sẽ phát hiện thời điểm tính năng này được bật và tự động đưa vào các bài kiểm thử liên quan.

Bạn có thể kích hoạt chương trình kiểm thử CTS bằng cách sử dụng:

atest SingleDeviceTest

Thử nghiệm Trình xác minh CTS

Các bài kiểm thử Trình xác minh CTS sẽ xác thực hành vi Nhận biết Wi-Fi bằng hai thiết bị: thiết bị thử nghiệm và thiết bị đáng biết. Để chạy kiểm thử, hãy mở Trình xác minh CTS và chuyển đến phần có tiêu đề Kiểm thử nhận biết Wi-Fi.