Tính năng đồng thời STA/STA Wi-Fi

Android 12 ra mắt tính năng đồng thời STA/STA Wi-Fi, cho phép các thiết bị kết nối đồng thời với 2 mạng Wi-Fi. Tính năng không bắt buộc này bật các hàm sau.

  • Thực hiện trước khi ngắt: Thiết bị kết nối với mạng Wi-Fi mới trước khi ngắt kết nối hiện có. Việc này giúp 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 chỉ cục bộ và chỉ kết nối đồng thời: Thiết bị kết nối với một mạng chỉ 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à bị hạn chế đồng thời: Thiết bị kết nối với một mạng bị hạn chế (chỉ dành cho một số ứng dụng có đặ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) Nhiều mạng đồng thời có kết nối Internet: Thiết bị kết nối với 2 mạng đều không bị hạn chế và dùng được cho mọi ứng dụng, đồng thời cung cấp kết nối Internet.

Trang này mô tả hành vi của thiết bị khi tính năng này được bật, cũng như thông tin chi tiết về cách triển khai cho các nhà sản xuất và nhà cung cấp thiết bị.

Triển khai

Thiết bị phải hỗ trợ những mục sau để triển khai tính năng đồng thời Wi-Fi STA/STA:

  • Chip Wi-Fi hoặc chương trình cơ sở phải hỗ trợ đồng thời 2 kết nối STA. Chương trình cơ sở phải hỗ trợ mọi 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, bạn nên sử dụng chip Wi-Fi DBS 2x2+2x2.

  • Thiết bị phải hỗ trợ các API sau trong quá trình triển khai AIDL hoặc HIDL của IWifiChip.

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • Tổ hợp giao diện Wi-Fi HAL phải hiển thị đồng thời 2 giao diện STA theo định dạng thông số kỹ thuật như [{STA} <= 2, ...]. Để 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.

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

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

    • Trước nghỉ giải lao:config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • Kết nối Internet và chỉ cục bộ đồng thời: config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • Kết nối Internet và bị hạn chế đồng thời: config_wifiMultiStaRestrictedConcurrencyEnabled
    • Đồng thời nhiều mạng có kết nối Internet: config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. Xác thực từng cách triển khai theo mô tả trong các mục tương ứng.

Để hỗ trợ tốt hơn tính năng đồng thời STA/STA Wi-Fi, các khung và ứng dụng được OEM tuỳ chỉnh 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 và không dùng nữa trong Android 12. Để biết thêm thông tin, hãy xem bài viết Wi-Fi Network Request API cho kết nối ngang hàng.

Tạo trước điểm chèn quảng cáo

Chức năng làm 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 mạng cũ kết nối thành công với mạng Wi-Fi mới và có quyền truy cập Internet.

Trường hợp sử dụng trước khi nghỉ giải quyết các vấn đề 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 (giải lao trước khi làm).

  • Khi kết nối với một mạng mới, thiết bị có thể phát hiện ra rằng mình đã 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 khoảng thời gian đáng kể khi không có kết nối Wi-Fi.

  • Mạng cũ bị ngắt kết nối đột ngột, tức 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 với việc mất kết nối đột ngột và điều này có thể khiến 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 sẽ 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 về 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.

Quy trình ngắt kết nối chỉ dùng cho các công tắc mạng Wi-Fi tự động do hệ điều hành khởi tạo. Thao tác chuyển đổi mạng do người dùng khởi tạo sẽ sử dụng quy trình ngắt trước khi tạo cũ, trong đó mạng trước đó bị ngắt kết nối hoàn toàn trước khi mạng mới được kết nối. Trong một số trường hợp, quy trình ngắt trước khi thực hiện được sử dụng ngay cả trong các công tắc tự động do hệ điều hành khởi tạo, ví dụ: khi chuyển đổi giữa hai mạng đều được định cấu hình để sử dụng địa chỉ MAC ban đầu.

Các ứng dụng có thể dùng API WifiManager#isMakeBeforeBreakWifiSwitchingSupported() để 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.

Xác thực thực hiện trước khi ngắt

Để xác thực quá trình triển khai, hãy kích hoạt nút chuyển 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 đã kết nối) 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 đã được kết nối, hãy 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ó khả năng kết nối, thì 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à huỷ việc thử khi phát hiện mạng mới không có Internet. Sau đó, thiết bị sẽ tiếp tục sử dụng kết nối hiện có làm mạng Wi-Fi chính.

Kết nối Internet và chỉ cục bộ đồng thời

Hàm chỉ kết nối cục bộ và kết nối Internet đồ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. Hàm 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ư camera, có thể thực hiện thông qua API WifiNetworkSpecifier được thêm vào Android 10.

Trên Android 11 trở xuống, các thiết bị sẽ ngắt kết nối khỏi mạng Wi-Fi chính khi kết nối với một thiết bị IoT, dẫn đến việc mất kết nối Internet (trừ phi thiết bị có một loại phương tiện 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ề những thay đổi đối với chức năng kết nối Internet đồng thời chỉ cục bộ và chỉ kết nối cục bộ trong Android 12, hãy xem bài viết Wi-Fi Network Request API cho kết nối ngang hàng.

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

Để xác thực hàm này, hãy sử dụng quy trình kiểm thử CTS MultiStaConcurrencyWifiNetworkSpecifierTest.

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

Chức năng kết nối Internet và kết nối bị hạn chế đồng thời cho phép thiết bị kết nối đồng thời với một mạng Wi-Fi chính của người dùng và một mạng Wi-Fi bị hạn chế chỉ dành 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 một thiết bị kết nối với mạng Wi-Fi bị hạn chế phụ, hãy làm theo các bước sau:

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

  2. Trong ConnectivityManager, hãy gửi NetworkRequest có các tính năng tương ứng:

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

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

Để xác thực hàm này, hãy sử dụng quy trình kiểm thử CTS MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest.

Kết nối đồng thời nhiều mạng

Có trên Android 13 trở lên, tính năng đồng thời nhiều mạng có kết nối Internet cho phép thiết bị kết nối đồng thời với 2 mạng (AP), cả hai mạng này đều không bị hạn chế (tất cả ứng dụng đều có quyền truy cập) và 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 đ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ạng Wi-Fi cung cấp Internet.

  1. Tạo thông số mạng Wi-Fi bằng cách sử dụng WifiNetworkSpecifier.Builder. Chọn một dây đeo cho thông số kỹ thuật bằ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 sẽ do khung Wi-Fi chọn.

  2. Sử dụng ConnectivityManager, tạo NetworkRequest có chức năng NET_CAPABILITY_INTERNET.

  3. Thêm thông số kỹ thuật vào yêu cầu mạng cùng với thực thể NetworkCallback để theo dõi trạng thái của yêu cầu và gửi yêu cầu đến ConnectivityManager. Nếu có một mạng đã lưu với băng tần được yêu cầu trong kết quả quét và kết nối với mạng thành công, thì 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 bằng kết nối Internet

Để xác thực hàm này, hãy sử dụng phép kiểm thử CTS sau đây:

  • CTS (Bộ kiểm tra tính tương thích): MultiStaConcurrencyMultiInternetWifiNetworkTest

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

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

Chip Wi-Fi phải hỗ trợ kết nối STA đồng thời kép. Tức là API này hỗ trợ những nội dung sau:

  • Mỗi giao diện STA có một môi trường MAC duy nhất có thể được lập trình theo khung.
  • Giao diện STA phụ có thể được tạo và huỷ một cách linh động.
  • Mỗi STA có thể được kết nối với một SSID khác (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 này 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à 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:

  • Tính năng chuyển vùng phải được hỗ trợ trên ít nhất là giao diện chính (được đặt bằng IWifiChip.setMultiStaPrimaryConnection()). Nếu tính năng chuyển vùng được hỗ trợ trên cả hai giao diện, thì 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 đổi sang BSSID của kết nối khác.

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

  • Số liệu thống kê lớp liên kết phải hoạt động theo từng giao diện.

Sau đây là những cách triển khai chip Wi-Fi được đề xuất cho nhiều tình huống đồng thời:

  • Chip Wi-Fi phải cho phép khung gọi IWifiChip.setMultiStaUseCase() bằng một trong các hằng số sau để chỉ định hàm hiện tại:

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY: Chỉ định hàm Make-Trước khi nghỉ. Chất lượng của kết nối chính phải được ưu tiên hơn kết nối phụ.
    • DUAL_STA_NON_TRANSIENT_UNBIASED: Chỉ định hàm kết nối Internet và chỉ kết nối cục bộ đồng thời hoặc hàm kết nối Internet và kết nối bị 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 của MCC, SCC và DBS, nên việc triển khai nhà cung cấp phải chọn cấu hình vô tuyến phù hợp nhất khi khung gọi IWifiChip.setMultiStaUseCase() để chỉ báo hàm. Sau đây là các nguyên tắc chung:

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

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY: 70% tiểu học, 30% trung học.
      • DUAL_STA_NON_TRANSIENT_UNBIASED: 50% tiểu học, 50% trung học.