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 cho phép 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ó. Điều này giúp quá trình chuyển đổi diễn ra mượt mà hơn khi chuyển đổi giữa các mạng Wi-Fi
- Kết nối Internet và 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 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 quyền) mà không làm gián đoạn kết nối Internet chính của thiết bị.
- (Android 13 trở lên) Đồng thời có nhiều mạng có kết nối Internet: Thiết bị kết nối với hai mạng, cả hai đều không bị hạn chế và có sẵn cho tất cả ứ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 bật tính năng này và thông tin chi tiết về cách triển khai cho nhà sản xuất và nhà cung cấp thiết bị.
Triển khai
Để triển khai tính năng đồng thời STA/STA Wi-Fi, thiết bị phải hỗ trợ những tính năng sau:
Bộ vi mạch 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 mềm phải hỗ trợ tất cả các 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 có khả năng 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 các điều kiện tiên quyết đó, hãy triển khai tính năng đồng thời Wi-Fi STA/STA bằng cách làm như sau:
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).
- Tạo trước khi nghỉ:
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
- Kết nối Internet và kết nối chỉ có tại cửa hàng địa phương đồng thời:
config_wifiMultiStaLocalOnlyConcurrencyEnabled
- Kết nối Internet và bị hạn chế đồng thời:
config_wifiMultiStaRestrictedConcurrencyEnabled
- Đồng thời có nhiều mạng có kết nối Internet:
config_wifiMultiStaMultiInternetConcurrencyEnabled
- Tạo trước khi nghỉ:
Xác thực từng phương thức triển khai như mô tả trong các phần tương ứng.
Để hỗ trợ tốt hơn cho tính năng đồng thời STA/STA Wi-Fi, bạn nên sử dụng phương thức NetworkCallback#onCapabilitiesChanged()
thay vì WifiManager#getConnectionInfo()
cho các khung và ứng dụng do OEM tuỳ chỉnh. Phương thức WifiManager#getConnectionInfo()
chỉ trả về WifiInfo
cho một mạng và không còn được dùng 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 khi ngắt
Hàm 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 với mạng cũ khi 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 tạo trước khi ngắt 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 vớ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 tạo).
Khi kết nối với một mạng mới, thiết bị có thể phát hiện rằng mật khẩu Wi-Fi đã lưu 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 việc mất nhiều thời gian 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 phản ứng không tốt khi đột ngột mất kết nối. Điều này có thể khiến người dùng không có kết nối Internet trong vài giây cho đến khi kết nối mới được thiết lập đầy đủ.
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 ứ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. Các nút chuyển mạng do người dùng khởi tạo 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ể 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 tính năng tạo 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 có một 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 đề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, 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à kết nối cục bộ đồng thời
Hàm kết nối Internet và kết nối 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 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ư máy ảnh, 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 vớ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ừ phi thiết bị có sẵn một loại phương thức 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 bài viết Wi-Fi Network Request API cho kết nối ngang hàng.
Xác thực kết nối Internet và kết nối chỉ cục bộ
Để 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
Hàm kết nối Internet và bị hạn chế đồng thời cho phép thiết bị đồng thời kết nối với một mạng Wi-Fi chính cho 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 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:
Thêm Đề xuất mạng Wi-Fi bằng
setOemPaid
hoặcsetOemPrivate
được đặt thành true.Trong
ConnectivityManager
, hãy gửiNetworkRequest
có các chức năng tương ứng:NET_CAPABILITY_OEM_PAID
chosetOemPaid
NET_CAPABILITY_OEM_PRIVATE
chosetOemPrivate
Khi phát hiện kết quả quét có một mạng khớp với đề xuất riêng tư hoặc đề xuất có tính phí của 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
.
Nhiều mạng đồng thời có kết nối Internet
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 cách sử dụ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 cách sử dụng phương thức WifiManager#setStaConcurrencyForMultiInternetMode(int mode)
. Tính năng này có các chế độ sau:
WifiManager#WIFI_MULTI_INTERNET_MODE_DBS_AP
: Hạn chế các kết nối kép ở băng tần kép của AP DBS.WifiManager#WIFI_MULTI_INTERNET_MODE_MULTI_AP
: Kết nối với các AP tuỳ ý, trong đó các kết nối riêng lẻ sử dụng các băng tần khác nhau.WifiManager#WIFI_MULTI_INTERNET_MODE_DISABLED
: Tắt tính năng.
Để 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.
Tạo chỉ định mạng Wi-Fi bằng cách sử dụng
WifiNetworkSpecifier.Builder
. Chọn một dải cho chỉ định bằng phương thứcsetBand()
. Đừng chỉ định SSID hoặc BSSID làm mạng bổ sung cho băng tần được chỉ định do khung Wi-Fi chọn.Sử dụng
ConnectivityManager
, hãy tạo mộtNetworkRequest
có chức năngNET_CAPABILITY_INTERNET
.Thêm chỉ định vào yêu cầu mạng cùng với một thực thể
NetworkCallback
để theo dõi trạng thái của yêu cầu và đưa ra yêu cầu choConnectivityManager
. 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 nhiều mạng đồng thời có kết nối Internet
Để xác thực hàm này, hãy sử dụng kiểm thử CTS sau:
- CTS:
MultiStaConcurrencyMultiInternetWifiNetworkTest
Nguyên tắc về khối 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ợ tính năng đồng thời STA/STA Wi-Fi.
Vi mạch Wi-Fi phải hỗ trợ hai kết nối STA đồng thời. Điều này có nghĩa là phiên bản này hỗ trợ:
- 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ể 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ở mỗi giao diện và phải có trên giao diện chính. Sau đây là danh sách các tính năng quan trọng này:
Tính năng chuyển vùng phải được hỗ trợ trên ít nhất 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 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 (đặt bằng
IWifiChip.setMultiStaPrimaryConnection()
).Số liệu thống kê về lớp liên kết phải hoạt động trên cơ sở từng giao diện.
Sau đây là các cách triển khai chip Wi-Fi được đề xuất cho nhiều trường hợp đồng thời:
Khối 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 kết nối Internet và 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. Bạn phải ưu tiên chất lượng của cả hai kết nối 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 có thể định cấu hình chu kỳ làm việc của MCC cho nhiều chức năng. Khung này không trực tiếp đặt chu kỳ làm việc 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% màu chính, 30% màu phụ.DUAL_STA_NON_TRANSIENT_UNBIASED
: 50% chính, 50% phụ.