Android 12 เปิดตัวการทำงานพร้อมกันของ STA/STA ของ Wi-Fi ซึ่งช่วยให้อุปกรณ์เชื่อมต่อกับเครือข่าย Wi-Fi 2 เครือข่ายพร้อมกันได้ ฟีเจอร์ที่ไม่บังคับนี้เปิดใช้ฟังก์ชันต่อไปนี้
- เชื่อมต่อก่อนตัดการเชื่อมต่อ: อุปกรณ์จะเชื่อมต่อกับเครือข่าย Wi-Fi ใหม่ก่อนที่จะตัดการเชื่อมต่อที่มีอยู่ ซึ่งจะช่วยให้การเปลี่ยนเครือข่าย Wi-Fi เป็นไปอย่างราบรื่นยิ่งขึ้น
- การเชื่อมต่ออินเทอร์เน็ตและการเชื่อมต่อภายในพร้อมกัน: อุปกรณ์เชื่อมต่อกับเครือข่ายภายในโดยไม่รบกวนการเชื่อมต่ออินเทอร์เน็ตหลักของอุปกรณ์
- การเชื่อมต่ออินเทอร์เน็ตและการเชื่อมต่อแบบจำกัดพร้อมกัน: อุปกรณ์เชื่อมต่อกับเครือข่ายที่มีข้อจำกัด (ใช้ได้กับบางแอปที่มีสิทธิ์เท่านั้น) โดยไม่รบกวนการเชื่อมต่ออินเทอร์เน็ตหลักของอุปกรณ์
- (Android 13 ขึ้นไป) เครือข่ายหลายเครือข่ายที่มีการเชื่อมต่ออินเทอร์เน็ตพร้อมกัน: อุปกรณ์เชื่อมต่อกับเครือข่าย 2 เครือข่ายที่ไม่มีการจำกัดและพร้อมให้บริการสำหรับแอปทั้งหมด รวมถึงมีการเชื่อมต่ออินเทอร์เน็ต
หน้านี้จะอธิบายลักษณะการทำงานของอุปกรณ์เมื่อเปิดใช้ฟีเจอร์นี้และรายละเอียดการใช้งานสำหรับผู้ผลิตและผู้ให้บริการอุปกรณ์
การใช้งาน
อุปกรณ์ต้องรองรับสิ่งต่อไปนี้จึงจะใช้ STA/STA พร้อมกันของ Wi-Fi ได้
ชิปหรือเฟิร์มแวร์ Wi-Fi ต้องรองรับการเชื่อมต่อ STA พร้อมกัน 2 รายการ เฟิร์มแวร์ต้องรองรับชุดค่าผสมของช่องและย่านความถี่ทั้งหมดสำหรับการเชื่อมต่อทั้ง 2 ประเภท เราขอแนะนำให้ใช้ชิป Wi-Fi ที่รองรับ DBS 2x2+2x2 เพื่อหลีกเลี่ยงปัญหาด้านประสิทธิภาพ
อุปกรณ์ต้องรองรับ API ต่อไปนี้ในการใช้งาน AIDL หรือ HIDL ของ
IWifiChip
IWifiChip.setMultiStaPrimaryConnection(String ifName)
IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
อินเทอร์เฟซ Wi-Fi ของ HAL ที่ใช้ร่วมกันต้องมีอินเทอร์เฟซ STA 2 รายการที่แสดงพร้อมกันโดยใช้รูปแบบข้อกำหนด เช่น
[{STA} <= 2, ...]
ดูข้อมูลเพิ่มเติมได้ที่การทำงานพร้อมกันหลายอินเทอร์เฟซของ Wi-Fi
หากมีคุณสมบัติตรงตามข้อกําหนดเบื้องต้นเหล่านั้น ให้ใช้ STA/STA พร้อมกันของ Wi-Fi โดยทําดังนี้
เปิดใช้ฟังก์ชันอย่างน้อย 1 รายการทีละรายการโดยใช้การวางซ้อนทรัพยากรรันไทม์ (ปิดใช้โดยค่าเริ่มต้น)
- Make-before-break:
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
- การเชื่อมต่อแบบใช้อินเทอร์เน็ตและแบบใช้เฉพาะเครื่องพร้อมกัน
config_wifiMultiStaLocalOnlyConcurrencyEnabled
- การเชื่อมต่ออินเทอร์เน็ตและการเชื่อมต่อแบบจำกัดพร้อมกัน
config_wifiMultiStaRestrictedConcurrencyEnabled
- เครือข่ายหลายเครือข่ายที่มีการเชื่อมต่ออินเทอร์เน็ตพร้อมกัน
config_wifiMultiStaMultiInternetConcurrencyEnabled
- Make-before-break:
ตรวจสอบการติดตั้งใช้งานแต่ละรายการตามที่อธิบายไว้ในส่วนที่เกี่ยวข้อง
เราขอแนะนำให้เฟรมเวิร์กและแอปที่ OEM ปรับแต่งใช้เมธอด NetworkCallback#onCapabilitiesChanged()
แทน WifiManager#getConnectionInfo()
เพื่อรองรับการทำงานพร้อมกันของ STA/STA ของ Wi-Fi ได้ดียิ่งขึ้น ซึ่งจะแสดงผลลัพธ์ WifiInfo
สำหรับเครือข่ายเดียวเท่านั้นและเลิกใช้งานแล้วใน Android 12 ดูข้อมูลเพิ่มเติมที่หัวข้อWi-Fi Request Network API สำหรับการเชื่อมต่อแบบ peer-to-peer
Make-before-break
ฟังก์ชัน make-before-break ช่วยให้อุปกรณ์เชื่อมต่อกับเครือข่าย Wi-Fi ใหม่ได้ในขณะที่ยังคงเชื่อมต่อเครือข่าย Wi-Fi ที่มีอยู่ และจะตัดการเชื่อมต่อจากเครือข่ายเดิมก็ต่อเมื่อเชื่อมต่อกับเครือข่าย Wi-Fi ใหม่และเข้าถึงอินเทอร์เน็ตได้สําเร็จเท่านั้น
Use Case การเชื่อมต่อก่อนตัดการเชื่อมต่อจะแก้ไขปัญหาต่อไปนี้ใน Android 11 หรือต่ำกว่า ซึ่งอุปกรณ์ต้องยกเลิกการเชื่อมต่อจากเครือข่าย Wi-Fi ที่มีอยู่ก่อนเชื่อมต่อกับเครือข่ายใหม่ (ยกเลิกการเชื่อมต่อก่อนเชื่อมต่อ)
เมื่อเชื่อมต่อกับเครือข่ายใหม่ อุปกรณ์อาจพบว่ามีการบันทึกรหัสผ่าน Wi-Fi ที่ไม่ถูกต้องไว้ หรือเครือข่ายใหม่ไม่มีอินเทอร์เน็ต ซึ่งจะบังคับให้อุปกรณ์เปลี่ยนกลับไปใช้เครือข่ายเดิม ทำให้ไม่มีการเชื่อมต่อ Wi-Fi เป็นเวลานาน
เครือข่ายเดิมถูกตัดการเชื่อมต่ออย่างกะทันหัน ซึ่งหมายความว่าซ็อกเก็ตทั้งหมดจะปิดลง แอปมักตอบสนองไม่ดีเมื่อการเชื่อมต่อขาดหายไปอย่างกะทันหัน ซึ่งอาจทำให้ผู้ใช้ไม่มีการเชื่อมต่ออินเทอร์เน็ตเป็นเวลา 2-3 วินาทีจนกว่าการเชื่อมต่อใหม่จะสมบูรณ์
เครือข่ายเริ่มต้นจะเปลี่ยน 2 ครั้ง จากเครือข่าย Wi-Fi เดิมเป็นเครือข่ายมือถือ แล้วจากเครือข่ายมือถือเป็นเครือข่าย Wi-Fi ใหม่ ซึ่งทำให้แอปตอบสนองต่อการเปลี่ยนแปลงเครือข่าย 2 ครั้ง นอกจากนี้ อุปกรณ์ยังต้องใช้อินเทอร์เน็ตมือถือเป็นระยะเวลาสั้นๆ ด้วย
ขั้นตอนการสร้างก่อนหยุดจะใช้กับการเปลี่ยนเครือข่าย Wi-Fi โดยอัตโนมัติที่ระบบปฏิบัติการเริ่มเท่านั้น การเปลี่ยนเครือข่ายที่ผู้ใช้เริ่มใช้จะใช้โฟลว์แบบเดิมซึ่งจะตัดการเชื่อมต่อเครือข่ายก่อนหน้าออกก่อนเชื่อมต่อเครือข่ายใหม่ ในบางกรณี ระบบจะใช้โฟลว์ "หยุดก่อนเชื่อมต่อ" แม้แต่ในการสลับอัตโนมัติที่ระบบปฏิบัติการเป็นผู้เริ่ม เช่น เมื่อสลับระหว่าง 2 เครือข่ายที่กําหนดค่าให้ใช้ที่อยู่ MAC เริ่มต้น
แอปสามารถตรวจสอบว่าอุปกรณ์รองรับกรณีการใช้งานนี้หรือไม่โดยใช้ WifiManager#isMakeBeforeBreakWifiSwitchingSupported()
API
ตรวจสอบ make-before-break
หากต้องการตรวจสอบการติดตั้งใช้งาน ให้ทริกเกอร์การเปลี่ยนเครือข่าย Wi-Fi โดยอัตโนมัติ (โดยตรวจสอบว่ามีเครือข่ายที่มีสัญญาณแรงกว่าเครือข่ายที่เชื่อมต่ออยู่) และยืนยันว่าอุปกรณ์ยังคงการเชื่อมต่อที่มีอยู่ขณะเชื่อมต่อกับเครือข่ายใหม่ หากต้องการดูสถานะของอินเทอร์เฟซ Wi-Fi ทั้ง 2 รายการและยืนยันว่าทั้ง 2 รายการเชื่อมต่ออยู่ ให้ใช้คำสั่งต่อไปนี้
adb shell wpa_cli -i wlan0 status ; echo ; adb shell wpa_cli -i wlan1 status
หากเครือข่ายใหม่ไม่มีการเชื่อมต่อ อุปกรณ์จะพยายามเชื่อมต่อกับเครือข่ายดังกล่าวขณะที่ยังคงเชื่อมต่อกับเครือข่ายที่มีอยู่ และยกเลิกการเชื่อมต่อเมื่อตรวจพบว่าเครือข่ายใหม่ไม่มีอินเทอร์เน็ต จากนั้นอุปกรณ์จะใช้การเชื่อมต่อที่มีอยู่เป็นเครือข่าย Wi-Fi หลักต่อไป
การเชื่อมต่ออินเทอร์เน็ตและการเชื่อมต่อในเครือข่ายเฉพาะที่พร้อมกัน
ฟังก์ชันการเชื่อมต่อภายในเท่านั้นและอินเทอร์เน็ตพร้อมกันช่วยให้อุปกรณ์เชื่อมต่อกับการเชื่อมต่อภายในเท่านั้นได้ เช่น การเชื่อมต่อกับอุปกรณ์ IoT พร้อมกันกับเครือข่ายหลักที่ให้บริการอินเทอร์เน็ต ฟังก์ชันนี้ช่วยปรับปรุงประสบการณ์ของผู้ใช้เมื่อเชื่อมต่อกับอุปกรณ์ IoT โดยตรง เช่น กล้อง ซึ่งทำได้ผ่าน WifiNetworkSpecifier
API ที่เพิ่มเข้ามาใน Android 10
ใน Android 11 และต่ำกว่า อุปกรณ์จะตัดการเชื่อมต่อจากเครือข่าย Wi-Fi หลักเมื่อเชื่อมต่อกับอุปกรณ์ IoT ซึ่งจะทำให้การเชื่อมต่ออินเทอร์เน็ตขาดหายไป (เว้นแต่อุปกรณ์จะมีประเภทการรับส่งข้อมูลอื่น เช่น อินเทอร์เน็ตมือถือ)
แอปสามารถตรวจสอบว่าอุปกรณ์รองรับฟังก์ชันนี้หรือไม่โดยใช้ WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported()
API
ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงฟังก์ชันการเชื่อมต่ออินเทอร์เน็ตและการเชื่อมต่อในเครื่องพร้อมกันใน Android 12 ได้ที่ Wi-Fi Network Request API สำหรับการเชื่อมต่อแบบ peer-to-peer
ตรวจสอบการเชื่อมต่อภายในและอินเทอร์เน็ต
หากต้องการตรวจสอบฟังก์ชันนี้ ให้ใช้
MultiStaConcurrencyWifiNetworkSpecifierTest
การทดสอบ CTS
การเชื่อมต่ออินเทอร์เน็ตและการเชื่อมต่อแบบจำกัดพร้อมกัน
ฟังก์ชันการเชื่อมต่ออินเทอร์เน็ตและการเชื่อมต่อแบบจำกัดพร้อมกันช่วยให้อุปกรณ์เชื่อมต่อกับเครือข่าย Wi-Fi หลักสำหรับผู้ใช้และเครือข่าย Wi-Fi แบบจำกัดที่มีให้เฉพาะบางแอปได้พร้อมกัน
แอปสามารถตรวจสอบว่าอุปกรณ์รองรับฟังก์ชันนี้หรือไม่โดยใช้ WifiManager#isStaConcurrencyForRestrictedConnectionsSupported()
API
หากต้องการอนุญาตให้อุปกรณ์เชื่อมต่อกับเครือข่าย Wi-Fi รองที่มีข้อจำกัด ให้ทำตามขั้นตอนต่อไปนี้
เพิ่มคำแนะนำเครือข่าย Wi-Fi โดยตั้งค่า
setOemPaid
หรือsetOemPrivate
เป็น "จริง"ใน
ConnectivityManager
ให้ยื่นNetworkRequest
ที่มีความสามารถต่อไปนี้NET_CAPABILITY_OEM_PAID
สำหรับsetOemPaid
NET_CAPABILITY_OEM_PRIVATE
สำหรับsetOemPrivate
เมื่ออุปกรณ์ตรวจพบผลการสแกนที่มีเครือข่ายที่ตรงกับคำแนะนำแบบชำระเงินหรือแบบส่วนตัวของ OEM อุปกรณ์จะเชื่อมต่อกับเครือข่ายนั้นโดยอัตโนมัติเป็นเครือข่ายรอง
ตรวจสอบการเชื่อมต่ออินเทอร์เน็ตและการเชื่อมต่อแบบจำกัดพร้อมกัน
หากต้องการตรวจสอบฟังก์ชันนี้ ให้ใช้
MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
การทดสอบ CTS
เครือข่ายหลายเครือข่ายที่มีการเชื่อมต่ออินเทอร์เน็ตพร้อมกัน
ฟีเจอร์การเชื่อมต่อเครือข่ายหลายเครือข่ายพร้อมกันที่มีการเชื่อมต่ออินเทอร์เน็ตพร้อมใช้งานใน Android 13 ขึ้นไป ซึ่งช่วยให้อุปกรณ์เชื่อมต่อกับเครือข่าย 2 เครือข่าย (AP) ได้พร้อมกัน โดยทั้ง 2 เครือข่ายนี้ไม่มีข้อจำกัด (แอปทั้งหมดมีสิทธิ์เข้าถึง) และมีการเชื่อมต่ออินเทอร์เน็ต
แอปสามารถตรวจสอบว่าอุปกรณ์รองรับฟีเจอร์นี้หรือไม่โดยใช้วิธี WifiManager#isStaConcurrencyForMultiInternetSupported()
หากระบบรองรับฟีเจอร์นี้ แอปที่มีสิทธิ์จะเปิดใช้ฟีเจอร์ได้โดยใช้วิธี WifiManager#setStaConcurrencyForMultiInternetMode(int mode)
ฟีเจอร์นี้มีโหมดต่อไปนี้
WifiManager#WIFI_MULTI_INTERNET_MODE_DBS_AP
: จำกัดการเชื่อมต่อแบบคู่ไว้ที่ย่านความถี่คู่ของ AP DBSWifiManager#WIFI_MULTI_INTERNET_MODE_MULTI_AP
: เชื่อมต่อกับ AP ที่กำหนดเองซึ่งการเชื่อมต่อแต่ละรายการใช้แบนด์ที่แตกต่างกันWifiManager#WIFI_MULTI_INTERNET_MODE_DISABLED
: ปิดใช้ฟีเจอร์
หากต้องการค้นหาโหมดฟีเจอร์ที่ใช้งานอยู่ในปัจจุบัน ให้ใช้วิธี WifiManager#getStaConcurrencyForMultiInternetMode()
เมื่อเปิดใช้ฟีเจอร์แล้ว ให้ทำตามขั้นตอนต่อไปนี้เพื่อขอเครือข่าย Wi-Fi เพิ่มเติมที่ให้บริการอินเทอร์เน็ต
สร้างตัวระบุเครือข่าย Wi-Fi โดยใช้
WifiNetworkSpecifier.Builder
เลือกย่านความถี่สำหรับตัวระบุโดยใช้วิธีsetBand()
อย่าระบุ SSID หรือ BSSID เนื่องจากเฟรมเวิร์ก Wi-Fi จะเลือกเครือข่ายเพิ่มเติมสำหรับย่านความถี่ที่ระบุใช้
ConnectivityManager
เพื่อสร้างNetworkRequest
ที่มีความสามารถNET_CAPABILITY_INTERNET
เพิ่มตัวระบุลงในคําขอเครือข่ายพร้อมกับอินสแตนซ์
NetworkCallback
เพื่อติดตามสถานะคําขอ และส่งคําขอไปยังConnectivityManager
หากมีเครือข่ายที่บันทึกไว้ซึ่งใช้ย่านความถี่ที่ขอในผลการสแกน และการเชื่อมต่อกับเครือข่ายสําเร็จ ระบบจะเรียกใช้NetworkCallback.onAvailable()
ในออบเจ็กต์การเรียกกลับ
ตรวจสอบเครือข่ายหลายเครือข่ายพร้อมกันที่มีการเชื่อมต่ออินเทอร์เน็ต
หากต้องการตรวจสอบฟังก์ชันนี้ ให้ใช้การทดสอบ CTS ต่อไปนี้
- CTS:
MultiStaConcurrencyMultiInternetWifiNetworkTest
หลักเกณฑ์ชิป Wi-Fi ของผู้ให้บริการ
สำหรับผู้ให้บริการชิป Wi-Fi ให้ใช้หลักเกณฑ์ต่อไปนี้เพื่อรองรับการทำงานพร้อมกันของ STA/STA ของ Wi-Fi
ชิป Wi-Fi ต้องรองรับการเชื่อมต่อ STA พร้อมกัน 2 รายการ ซึ่งหมายความว่ารองรับสิ่งต่อไปนี้
- อินเทอร์เฟซ STA แต่ละรายการจะมี MAC ที่ไม่ซ้ำกันซึ่งเฟรมเวิร์กสามารถตั้งโปรแกรมได้
- อินเทอร์เฟซ STA รองสามารถสร้างและทำลายแบบไดนามิกได้
- STA แต่ละเครื่องเชื่อมต่อกับ SSID อื่นได้ (ภายในย่านความถี่เดียวกันหรือย่านความถี่อื่น)
- STA แต่ละเครื่องเชื่อมต่อกับ SSID เดียวกันได้ (ภายในย่านความถี่เดียวกันหรือย่านความถี่อื่น) STA 2 เครื่องต้องไม่เชื่อมต่อกับ BSSID เดียวกัน
ฟีเจอร์สําคัญต้องทํางานในแต่ละอินเทอร์เฟซและต้องพร้อมใช้งานในอินเทอร์เฟซหลัก รายการฟีเจอร์สําคัญมีดังนี้
อินเทอร์เฟซหลักต้องรองรับการโรมมิ่งเป็นอย่างน้อย (ตั้งค่าโดยใช้
IWifiChip.setMultiStaPrimaryConnection()
) หากอินเทอร์เฟซทั้ง 2 รองรับการโรมมิ่ง การตัดสินใจในการเชื่อมต่อหนึ่งต้องไม่ขัดแย้งกับการเชื่อมต่อที่ 2 ที่เกิดขึ้นพร้อมกัน เช่น อินเทอร์เฟซหนึ่งต้องไม่โรมมิงไปยัง BSSID ของการเชื่อมต่ออื่นAPF (และการส่งต่ออื่นๆ เช่น ARP และ NS) ต้องรองรับอย่างน้อยในอินเทอร์เฟซหลัก (ตั้งค่าโดยใช้
IWifiChip.setMultiStaPrimaryConnection()
)สถิติเลเยอร์ลิงก์ต้องทำงานแบบต่ออินเทอร์เฟซ
ต่อไปนี้คือการใช้งานชิป Wi-Fi ที่แนะนำสำหรับสถานการณ์การทำงานพร้อมกันที่แตกต่างกัน
ชิป Wi-Fi ต้องอนุญาตให้เฟรมเวิร์กเรียกใช้
IWifiChip.setMultiStaUseCase()
ด้วยค่าคงที่อย่างใดอย่างหนึ่งต่อไปนี้เพื่อระบุฟังก์ชันปัจจุบันDUAL_STA_TRANSIENT_PREFER_PRIMARY
: ระบุฟังก์ชัน Make-Before-Break คุณภาพของการเชื่อมต่อหลักต้องมีความสำคัญมากกว่าการเชื่อมต่อรองDUAL_STA_NON_TRANSIENT_UNBIASED
: ระบุฟังก์ชันการเชื่อมต่ออินเทอร์เน็ตและการเชื่อมต่อในเครื่องพร้อมกันหรือการเชื่อมต่ออินเทอร์เน็ตและการเชื่อมต่อแบบจำกัดพร้อมกัน คุณภาพของการเชื่อมต่อทั้ง 2 ประเภทต้องมีความสำคัญเท่าๆ กัน
เนื่องจาก STA แบบคู่พร้อมกันอาจทําให้ระบบทํางานในโหมด MCC, SCC และ DBS การติดตั้งใช้งานของผู้ให้บริการจึงต้องเลือกการกําหนดค่าวิทยุที่ดีที่สุดเมื่อเฟรมเวิร์กเรียก
IWifiChip.setMultiStaUseCase()
เพื่อระบุฟังก์ชัน หลักเกณฑ์ทั่วไปมีดังนี้- แนะนำให้ใช้ DBS 2x2+2x2 หากมี
- หลีกเลี่ยง DBS 1x1+1x1 หากเป็นไปได้ เนื่องจากจะส่งผลเสียต่อคุณภาพการเชื่อมต่อมากเกินไป แต่ให้ใช้ MCC แทน
- ไดร์เวอร์หรือเฟิร์มแวร์ต้องกำหนดค่ารอบการทำงาน MCC สำหรับฟังก์ชันต่างๆ ได้ เฟรมเวิร์กไม่ได้ตั้งค่ารอบการทำงาน MCC โดยตรง แต่ค้นหาข้อมูลนี้โดยใช้
StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent
หากใช้ MCC เราขอแนะนำให้ใช้รอบการทำงานต่อไปนี้ระหว่างการเชื่อมต่อหลักและรอง
DUAL_STA_TRANSIENT_PREFER_PRIMARY
: ภาษาหลัก 70% และภาษารอง 30%DUAL_STA_NON_TRANSIENT_UNBIASED
: 50% หลัก 50% รอง