Wi-Fi STA / STA Đồng thời

Android 12 giới thiệu Wi-Fi STA / STA đồng thời, cho phép các thiết bị kết nối đồng thời với hai mạng Wi-Fi. Tính năng tùy chọn này kích hoạt các chức năng sau.

  • Thực hiện trước khi ngắt : Thiết bị tạo kết nối với mạng Wi-Fi mới trước khi ngắt kết nối hiện có. Điều này dẫn đến quá trình chuyển đổi mượt mà hơn khi chuyển đổi giữa các mạng Wi-Fi
  • Kết nối internet và chỉ cục bộ đồng thời : Thiết bị kết nối với mạng cục bộ mà không làm gián đoạn kết nối cung cấp internet chính của thiết bị.
  • Kết nối internet và hạn chế đồng thời : Thiết bị kết nối với mạng bị hạn chế (chỉ khả dụng với một số ứng dụng đặc quyền) mà không làm gián đoạn kết nối cung cấp internet chính của thiết bị.
  • (Android 13 trở lên) Đồng thời nhiều mạng có kết nối internet : Thiết bị kết nối với hai mạng đều không bị giới hạn và khả dụng cho tất cả các ứng dụng, đồng thời cung cấp kết nối internet.

Trang này mô tả hoạt động của thiết bị khi tính năng này được bật và chi tiết triển khai cho các nhà sản xuất và nhà cung cấp thiết bị.

Thực hiện

Các thiết bị phải hỗ trợ những điều sau để triển khai đồng thời Wi-Fi STA / STA:

  • Chip hoặc chương trình cơ sở Wi-Fi phải hỗ trợ hai kết nối STA đồng thời. Phần sụn phải hỗ trợ tất cả các kết hợp kênh và băng tần cho cả hai kết nối. Để tránh các vấn đề về hiệu suất, chúng tôi khuyên bạn nên sử dụng chip Wi-Fi 2x2 + 2x2 DBS có khả năng hoạt động.

  • Thiết bị phải hỗ trợ các API sau trong phiên bản HAL 1.5 của nhà cung cấp

    • IWifiChip.setMultiStaPrimaryConnection()
    • IWifiChip.setMultiStaUseCase()
  • Kết hợp giao diện HAL Wi-Fi phải có hai giao diện STA đồng thời được hiển thị bằng cách sử dụng định dạng xác định như [{STA} <= 2, ...] . Để biết thêm thông tin, hãy xem Wi-Fi đa giao diện đồng thời .

Nếu những điều kiện tiên quyết đó được đáp ứng, hãy triển khai đồng thời Wi-Fi STA / STA bằng cách thực hiện như sau:

  1. Bật một hoặc nhiều chức năng riêng lẻ bằng cách sử dụng lớp phủ tài nguyên thời gian chạy (bị tắt theo mặc định).

    • Make-before-break : config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • Kết nối internet và chỉ cục bộ đồng thời : config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • Kết nối internet và hạn chế đồng thời : config_wifiMultiStaRestrictedConcurrencyEnabled
    • Đồng thời nhiều mạng với kết nối internet : config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. Xác thực từng cách triển khai như được mô tả trong các phần tương ứng của chúng bên dưới.

Để hỗ trợ đồng thời Wi-Fi STA / STA tốt hơn, chúng tôi khuyên bạn nên sử dụng phương thức NetworkCallback#onCapabilitiesChanged() thay vì WifiManager#getConnectionInfo() , phương thức này chỉ trả về WifiInfo cho một mạng duy nhất và không được dùng nữa trong Android 12 Để biết thêm thông tin, hãy xem API yêu cầu mạng Wi-Fi cho kết nối ngang hàng .

Làm trước khi nghỉ

Chức năng tạo trước khi ngắt cho phép các thiết bị kết nối với mạng Wi-Fi mới trong khi vẫn duy trì kết nối mạng Wi-Fi hiện có, chỉ ngắt kết nối khỏi mạng cũ khi nó kết nối thành công với mạng Wi-Fi mới và có truy cập internet.

Trường hợp sử dụng tạm thời giải quyết các sự cố sau trong Android 11 trở xuống, trong đó thiết bị phải ngắt kết nối khỏi mạng Wi-Fi hiện có trước khi kết nối với mạng mới (ngắt trước khi thực hiện).

  • Khi kết nối với mạng mới, thiết bị có thể phát hiện ra rằng thiết bị đã lưu mật khẩu Wi-Fi không chính xác hoặc mạng mới không có quyền truy cập internet. Điều này buộc thiết bị phải chuyển về mạng cũ, dẫn đến một lượng thời gian đáng kể không có kết nối Wi-Fi.

  • Mạng cũ bị ngắt kết nối đột ngột, có nghĩa là tất cả các ổ cắm đều bị đóng. Các ứng dụng thường không phản ứng tốt khi mất kết nối đột ngột và điều này có thể dẫn đến việc người dùng gặp phải một vài giây không có kết nối internet cho đến khi kết nối mới được thiết lập hoàn toàn.

  • Mạng mặc định thay đổi hai lần, từ mạng Wi-Fi cũ sang mạng di động, sau đó từ mạng di động sang mạng Wi-Fi mới. Điều này khiến các ứng dụng phản ứng với các thay đổi mạng hai lần. Thiết bị cũng phải dành một khoảng thời gian ngắn để sử dụng dữ liệu di động.

Luồng thực hiện trước khi ngắt chỉ được sử dụng cho các thiết bị chuyển mạch mạng Wi-Fi tự động do Hệ điều hành khởi tạo. Các thiết bị chuyển mạch mạng do người dùng khởi tạo sử dụng quy trình ngắt trước khi thực hiện kế thừa, trong đó mạng trước đó hoàn toàn bị ngắt kết nối trước khi mạng mới được kết nối. Trong một số trường hợp nhất định, luồng ngắt trước khi thực hiện được sử dụng ngay cả trong các thiết bị chuyển mạch tự động do HĐH khởi tạo, ví dụ, khi chuyển đổi giữa hai mạng cả hai đều được cấu hình để sử dụng địa chỉ MAC của nhà máy.

Các ứng dụng có thể kiểm tra xem trường hợp sử dụng này có được hỗ trợ trên thiết bị hay không bằng cách sử dụng API WifiManager#isMakeBeforeBreakWifiSwitchingSupported() .

Xác thực việc thực hiện trước khi nghỉ

Để xác thực việc triển khai của bạn, hãy kích hoạt công tắc mạng Wi-Fi tự động (bằng cách đảm bảo mạng có cường độ tín hiệu mạnh hơn mạng hiện đang kết nối khả dụng) và xác minh rằng thiết bị duy trì kết nối hiện có trong khi kết nối với mạng mới. Để xem trạng thái của cả hai giao diện Wi-Fi và xác minh rằng cả hai đều được kết nối, hãy sử dụng lệnh sau.

adb shell wpa_cli -i wlan0 status ; echo ; adb shell wpa_cli -i wlan1 status

Nếu mạng mới không có kết nối, thiết bị sẽ cố gắng kết nối với mạng, trong khi vẫn duy trì kết nối với mạng hiện có và hủy thử khi phát hiện mạng mới không có internet. Sau đó, thiết bị tiếp tục sử dụng kết nối hiện có làm mạng Wi-Fi chính.

Đồng thời chỉ cục bộ và kết nối internet

Chức năng kết nối internet và chỉ cục bộ đồng thời cho phép các thiết bị kết nối với một kết nối chỉ cục bộ, chẳng hạn như kết nối với thiết bị IoT, đồng thời với mạng cung cấp internet chính. Chức năng này cải thiện trải nghiệm người dùng khi kết nối trực tiếp với các thiết bị IoT, chẳng hạn như máy ảnh, có thể thực hiện được thông qua API WifiNetworkSpecifier được bổ sung trong Android 10.

Trong Android 11 trở xuống, các thiết bị ngắt kết nối khỏi mạng Wi-Fi chính khi kết nối với thiết bị IoT, dẫn đến mất kết nối internet (trừ khi thiết bị có sẵn loại truyền tải khác, chẳng hạn như dữ liệu di động).

Các ứng dụng có thể kiểm tra xem chức năng này có được hỗ trợ trên thiết bị hay không bằng cách sử dụng API WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() .

Để biết thêm thông tin về các thay đổi đối với chức năng kết nối internet và chỉ cục bộ đồng thời trong Android 12, hãy xem API yêu cầu mạng Wi-Fi cho kết nối ngang hàng .

Xác thực kết nối Internet và chỉ nội bộ

Để xác thực chức năng này, hãy sử dụng các bài kiểm tra CTS và ACTS sau:

  • CTS: MultiStaConcurrencyWifiNetworkSpecifierTest
  • ACTS: WifiStaConcurrencyNetworkRequestTest

Kết nối internet và hạn chế đồng thời

Chức năng kết nối internet và hạn chế đồng thời cho phép thiết bị kết nối đồng thời với mạng Wi-Fi chính cho người dùng và mạng Wi-Fi hạn chế chỉ khả dụng cho một số ứng dụng.

Các ứng dụng có thể kiểm tra xem chức năng này có được hỗ trợ trên thiết bị hay không bằng cách sử dụng API WifiManager#isStaConcurrencyForRestrictedConnectionsSupported() .

Để cho phép thiết bị kết nối với các mạng Wi-Fi bị hạn chế thứ cấp, hãy làm theo các bước sau:

  1. Thêm đề xuất mạng Wi-Fi với setOemPaid hoặc setOemPrivate được đặt thành true.

  2. Trong ConnectivityManager , gửi NetworkRequest với các khả năng tương ứng:

Khi thiết bị phát hiện kết quả quét với mạng khớp với đề xuất OEM trả phí hoặc OEM riêng, thiết bị sẽ tự động kết nối với nó như một mạng phụ.

Xác thực kết nối internet và hạn chế đồng thời

Để xác thực chức năng này, hãy sử dụng các bài kiểm tra CTS và ACTS sau:

  • CTS: MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
  • ACTS: WifiStaConcurrencyNetworkRequestTest

Đồng thời nhiều mạng với kết nối internet

Khả dụng cho Android 13 trở lên, tính năng kết nối internet nhiều mạng đồng thời cho phép thiết bị kết nối đồng thời với hai mạng (AP) cả hai mạng đều không bị giới hạn (tất cả các ứng dụng đều có quyền truy cập) và cung cấp quyền truy cập internet.

Các ứng dụng có thể kiểm tra xem tính năng này có được hỗ trợ trên thiết bị hay không bằng phương thức WifiManager#isStaConcurrencyForMultiInternetSupported() .

Nếu tính năng này được hỗ trợ, các ứng dụng đặc quyền có thể bật tính năng này bằng phương thức WifiManager#setStaConcurrencyForMultiInternetMode(int mode) . Tính năng này có các chế độ sau:

Để truy vấn chế độ tính năng hiện đang hoạt động, hãy sử dụng phương thức WifiManager#getStaConcurrencyForMultiInternetMode() .

Khi tính năng này được bật, hãy làm theo các bước sau để yêu cầu thêm một mạng Wi-Fi cung cấp internet.

  1. Tạo công cụ chỉ định mạng Wi-Fi bằng WifiNetworkSpecifier.Builder . Chọn một băng tần cho bộ chỉ định bằng cách sử dụng phương thức setBand() . Không chỉ định SSID hoặc BSSID vì mạng bổ sung cho băng tần được chỉ định được chọn bởi khung Wi-Fi.

  2. Sử dụng ConnectivityManager , tạo NetworkRequest với khả năng NET_CAPABILITY_INTERNET .

  3. Thêm trình xác định vào yêu cầu mạng cùng với một cá thể NetworkCallback để theo dõi trạng thái của yêu cầu và đưa yêu cầu tới ConnectivityManager . Nếu một mạng đã lưu với băng tần được yêu cầu có sẵn trong kết quả quét và kết nối với mạng thành công, NetworkCallback.onAvailable() sẽ được gọi trên đối tượng gọi lại.

Xác thực đồng thời nhiều mạng với kết nối internet

Để xác thực chức năng này, hãy sử dụng bài kiểm tra CTS sau:

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

Nguyên tắc về chip Wi-Fi của nhà cung cấp

Đối với nhà cung cấp chip Wi-Fi, hãy sử dụng các nguyên tắc sau để hỗ trợ Wi-Fi STA / STA đồng thời.

Chip Wi-Fi phải hỗ trợ kết nối STA kép đồng thời. Điều này có nghĩa là nó hỗ trợ những điều sau:

  • Mỗi giao diện STA có một MAC duy nhất có thể lập trình bởi khuôn khổ.
  • Giao diện STA thứ cấp có thể được tạo và phá hủy động.
  • Mỗi STA có thể được kết nối với một SSID khác nhau (trong cùng một băng tần hoặc một băng tần khác).
  • Mỗi STA có thể được kết nối với cùng một SSID (trong cùng một băng tần hoặc một băng tần khác). Hai STA không bao giờ được kết nối với cùng một BSSID.

Các tính năng quan trọng phải hoạt động trên cơ sở từng giao diện và chúng phải có sẵn trên giao diện chính. Sau đây là danh sách các tính năng quan trọng này:

  • Chuyển vùng ít nhất phải được hỗ trợ trên giao diện chính (được đặt bằng IWifiChip.setMultiStaPrimaryConnection() ). Nếu chuyển vùng được hỗ trợ trên cả hai giao diện, các quyết định về một kết nối không được xung đột với kết nối đồng thời thứ hai. Ví dụ: một giao diện không được chuyển vùng tới BSSID của kết nối kia.

  • APF (và các phần giảm tải khác như ARP và NS) ít nhất phải được hỗ trợ trên giao diện chính (được đặt bằng IWifiChip.setMultiStaPrimaryConnection() ).

  • Số liệu thống kê của lớp liên kết phải hoạt động trên cơ sở mỗi giao diện.

Sau đây là các cách triển khai chip Wi-Fi được khuyến nghị cho các trường hợp đồng thời khác nhau:

  • Chip Wi-Fi phải cho phép khuôn khổ gọi IWifiChip.setMultiStaUseCase() với một trong các hằng số sau để chỉ định chức năng hiện tại:

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY : Chỉ định chức năng Make-Before-Break. Chất lượng của kết nối chính phải được ưu tiên hơn kết nối thứ cấp.
    • DUAL_STA_NON_TRANSIENT_UNBIASED : Chỉ định kết nối internet và chỉ cục bộ đồng thời hoặc chức năng kết nối internet và hạn chế đồng thời . Chất lượng của cả hai kết nối phải được ưu tiên như nhau.
  • Vì các STA đồng thời kép có thể dẫn đến các chế độ hoạt động MCC, SCC và DBS, nhà cung cấp triển khai phải chọn cấu hình vô tuyến tốt nhất khi khung gọi IWifiChip.setMultiStaUseCase() để chỉ ra chức năng. Sau đây là các hướng dẫn chung:

    • 2x2 + 2x2 DBS được ưu tiên nếu có.
    • Tránh 1x1 + 1x1 DBS nếu có thể vì ảnh hưởng quá nhiều đến chất lượng kết nối. Thay vào đó, hãy thích MCC hơn.
    • Chu kỳ nhiệm vụ MCC phải được cấu hình bởi trình điều khiển hoặc phần sụn cho các chức năng khác nhau. Khung công tác không đặt trực tiếp chu kỳ nhiệm vụ MCC, nhưng truy vấn thông tin này bằng cách sử dụng StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent .
    • Nếu sử dụng MCC, chúng tôi khuyến nghị các chu kỳ làm việc sau giữa các kết nối chính và phụ:

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY : 70% chính, 30% phụ.
      • DUAL_STA_NON_TRANSIENT_UNBIASED : 50% sơ cấp, 50% phụ.