Android 12 ra mắt tính năng đồng thời Wi-Fi STA/STA 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.
- Giải lao: 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 dẫn đến chuyển đổi mượt mà hơn khi chuyển đổi giữa các mạng Wi-Fi
- Chỉ kết nối Internet và chỉ trong cục bộ đồng thời: Thiết bị kết nối với mạng chỉ cục bộ mà không làm gián đoạn cung cấp kết nối Internet chính.
- 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 thiết bị đồng thời mạng có kết nối Internet: Thiết bị kết nối thành hai mạng, cả hai đều không bị hạn chế và dùng được cho mọi ứng dụng, và cung cấp kết nối Internet.
Trang này mô tả cách 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 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 Wi-Fi STA/STA tính đồng thời:
Chip Wi-Fi hoặc chương trình cơ sở phải hỗ trợ đồng thời hai STA kết nối. Chương trình cơ sở này 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 DBS 2x2 + 2x2.
Thiết bị phải hỗ trợ các API sau trong AIDL hoặc HIDL triển khai
IWifiChip
.IWifiChip.setMultiStaPrimaryConnection(String ifName)
IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
Tổ hợp giao diện Wi-Fi HAL 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 thông số kỹ thuật như
[{STA} <= 2, ...]
. Cho thông tin khác, xem 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 cơ chế đồng thời Wi-Fi STA/STA bằng cách thực hiện như sau:
Bật một hoặc nhiều chức năng riêng lẻ bằng lớp phủ tài nguyên trong thời gian chạy (bị tắt bởi mặc định).
- Trước khi nghỉ giải lao:
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
- Chỉ kết nối Internet và chỉ trong 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
- Trước khi nghỉ giải lao:
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 cho tính năng đồng thời Wi-Fi STA/STA, chúng tôi khuyên bạn nên tùy chỉnh OEM
khung và ứng dụng 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à đã ngừng hoạt động trong Android 12. Cho
thông tin khác, xem
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 make-before-break (được làm trước khi nghỉ giải lao) cho phép các thiết bị kết nối với một mạng Wi-Fi mới trong khi vẫn duy trì kết nối mạng Wi-Fi hiện có. ngắt kết nối khỏi mạng cũ khi kết nối thành công với mạng mới Mạng Wi-Fi 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 trường hợp thiết bị phải ngắt kết nối) từ mạng Wi-Fi hiện tại 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 có đã lưu mật khẩu Wi-Fi không chính xác hoặc mạng mới không bật có kết nối Internet. Thao tác này sẽ buộc thiết bị chuyển về phiên bản cũ dẫn đến 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, do đó tất cả ổ cắm bị đóng. Các ứng dụng thường không phản ứng tốt với việc mất đột ngột kết nối và điều này có thể dẫn đến người dùng sẽ không có kết nối Internet trong vài giây cho đến khi kết nối đã được thiết lập đầy đủ.
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 sẽ khiến các ứng dụng phản ứng với mạng 2 lần. Thiết bị này cũng phải dành một khoảng thời gian ngắn thời gian sử dụng dữ liệu di động.
Quy trình ngắt kết nối chỉ được dùng cho mạng Wi-Fi tự động các nút chuyển do hệ điều hành khởi tạo. Chuyển đổi mạng do người dùng khởi tạo sử dụng ngắt luồng trước khi làm, trong đó mạng trước đó bị ngắt kết nối hoàn toàn trước khi kết nối mạng mới. Trong một số trường hợp nhất định, luồng ngắt trước khi làm được sử dụng ngay cả trong các nút chuyển tự động được khởi tạo bởi hệ điều hành, ví dụ: khi chuyển đổi giữa hai mạng, cả hai mạng đều được định cấu hình để sử dụng địa chỉ MAC gốc.
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 thực hiện trước khi ngắt
Để xác thực quá trình triển khai của bạn, 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 có mạng được kết nối hay khô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 đã đượ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ó kết nối, thiết bị cố gắng kết nối mạng trong khi vẫn duy trì kết nối với mạng hiện có và huỷ lần thử khi phát hiện mạng mới chưa 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.
Kết nối Internet và chỉ cục bộ đồng thời
Chức năng chỉ cục bộ đồng thời và kết nối Internet cho phép 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 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.
Trong 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 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ỉ Internet cục bộ và Internet đồng thời chức năng kết nối trong Android 12, hãy xem 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
MultiStaConcurrencyWifiNetworkSpecifierTest
thử nghiệm CTS.
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 bị hạn chế chỉ dành cho một số ứng dụng chọn lọc.
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()
.
Cách 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:
Thêm Đề xuất về mạng Wi-Fi thông qua tính năng
setOemPaid
hoặcsetOemPrivate
đặt thành true.Trong
ConnectivityManager
, hãy gửiNetworkRequest
kèm theo khả năng:NET_CAPABILITY_OEM_PAID
trongsetOemPaid
NET_CAPABILITY_OEM_PRIVATE
trongsetOemPrivate
Khi thiết bị phát hiện kết quả quét bằng một mạng khớp với nhà sản xuất thiết bị gốc (OEM) hoặc Đề xuất riêng tư của OEM 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
MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
thử nghiệm CTS.
Kết nối đồng thời nhiều mạng
Có sẵn cho Android 13 trở lên, quy tắc đồng nhất nhiều mạng có kết nối Internet. Tính năng này cho phép thiết bị kết nối đồng thời với hai 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à cung cấp kết nối 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 dùng
WifiManager#isStaConcurrencyForMultiInternetSupported()
.
Nếu tính năng này được hỗ trợ, các ứng dụng có đặc quyền có thể bật tính năng này bằng cách sử dụng
WifiManager#setStaConcurrencyForMultiInternetMode(int mode)
. Chiến lược phát hành đĩa đơn
tính năng này có các chế độ sau:
WifiManager#WIFI_MULTI_INTERNET_MODE_DBS_AP
: Hạn chế kết nối kép trên băng tần kép của DBS AP.WifiManager#WIFI_MULTI_INTERNET_MODE_MULTI_AP
: Kết nối với các AP tuỳ ý mà 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 này.
Để truy vấn chế độ tính năng hiện đang hoạt động, hãy sử dụng
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.
Tạo thông số mạng Wi-Fi bằng
WifiNetworkSpecifier.Builder
. Chọn dây đeo cho thông số kỹ thuật bằng cách sử dụngsetBand()
. Không chỉ định SSID hoặc BSSID làm mạng bổ sung cho băng tần đã chỉ định do khung Wi-Fi chọn.Sử dụng
ConnectivityManager
! tạo mộtNetworkRequest
có phương thứcNET_CAPABILITY_INTERNET
chức năng.Thêm thông số kỹ thuật vào yêu cầu mạng cùng với
NetworkCallback
để theo dõi trạng thái của yêu cầu và gửi yêu cầuConnectivityManager
. Nếu một mạng đã lưu với băng tần được yêu cầu đang có trong kết quả quét và kết nối mạng thành công,NetworkCallback.onAvailable()
đượ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 STA/STA Wi-Fi.
Chip Wi-Fi phải hỗ trợ kết nối STA đồng thời kép. Điều này có nghĩa là hỗ trợ các tính năng 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 SSID 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 SSID hoặc một băng tần khác). Hai STA này không bao giờ được đượ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 những yếu tố quan trọng tính năng:
Chuyển vùng phải được hỗ trợ ít nhất trên giao diện chính (đặt bằng
IWifiChip.setMultiStaPrimaryConnection()
). Nếu chế độ chuyển vùng được hỗ trợ trên cả hai giao diện, 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 với 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 (thiết lập bằng cách sử dụ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 các cấu hình khác nhau tình huống đồng thời:
Chip Wi-Fi phải cho phép khung gọi
IWifiChip.setMultiStaUseCase()
với 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 Tạo trước ngắt. 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à chỉ cục bộ đồng thời hoặc kết nối đồng thời kết nối Internet và bị hạn chế. Chất lượng của cả hai các kết nối phải được ưu tiên như nhau.
Bởi vì STA đồng thời kép có thể dẫn đến các chế độ MCC, SCC và DBS của hoạt động, việc triển khai nhà cung cấp phải chọn đài phát phù hợp nhất khi khung này gọi
IWifiChip.setMultiStaUseCase()
đến xác định chức năng. Sau đây là các nguyên tắc chung:- DBS 2x2+2x2 được ưu tiên nếu có.
- Tránh sử 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.
- Chu kỳ nhiệm vụ của MCC phải được định cấu hình bằng trình điều khiển hoặc chương trình cơ sở cho
các chức năng khác nhau. Khung này không thiết lập chu kỳ nhiệm vụ của 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ỳ nhiệm vụ sau đây giữa và kết nối 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.