Android 12 เปิดตัวการทำงานพร้อมกันของ Wi-Fi STA/STA ซึ่งช่วยให้อุปกรณ์เชื่อมต่อกับเครือข่าย Wi-Fi 2 เครือข่ายพร้อมกันได้ ฟีเจอร์เสริมนี้จะเปิดใช้ฟังก์ชันต่อไปนี้
- Make-before-break: อุปกรณ์จะเชื่อมต่อกับเครือข่าย Wi-Fi ใหม่ ก่อนที่จะยกเลิกการเชื่อมต่อที่มีอยู่ ซึ่งจะช่วยให้ การเปลี่ยนเครือข่าย Wi-Fi เป็นไปอย่างราบรื่นยิ่งขึ้น
- การเชื่อมต่ออินเทอร์เน็ตและเครือข่ายภายในเท่านั้นพร้อมกัน: อุปกรณ์จะ เชื่อมต่อกับเครือข่ายภายในเท่านั้นโดยไม่รบกวนการเชื่อมต่อ หลักของอุปกรณ์ที่ให้อินเทอร์เน็ต
- การเชื่อมต่ออินเทอร์เน็ตและเครือข่ายที่จำกัดพร้อมกัน: อุปกรณ์ เชื่อมต่อกับเครือข่ายที่จำกัด (ใช้ได้เฉพาะกับแอปบางแอปที่มีสิทธิ์) โดยไม่รบกวนการเชื่อมต่อหลักของอุปกรณ์ที่ให้อินเทอร์เน็ต
- (Android 13 ขึ้นไป) เครือข่ายหลายเครือข่ายพร้อมกัน ที่เชื่อมต่ออินเทอร์เน็ต: อุปกรณ์จะเชื่อมต่อ กับ 2 เครือข่ายที่ไม่มีข้อจำกัดและพร้อมใช้งานสำหรับทุกแอป และมีการเชื่อมต่ออินเทอร์เน็ต
หน้านี้จะอธิบายลักษณะการทำงานของอุปกรณ์เมื่อเปิดใช้ฟีเจอร์นี้ รวมถึง รายละเอียดการติดตั้งใช้งานสำหรับผู้ผลิตและผู้จำหน่ายอุปกรณ์
การใช้งาน
อุปกรณ์ต้องรองรับสิ่งต่อไปนี้จึงจะใช้การทำงานพร้อมกันของ Wi-Fi STA/STA ได้
ชิปหรือเฟิร์มแวร์ 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
หากมีคุณสมบัติตรงตามข้อกำหนดเบื้องต้นเหล่านั้น ให้ใช้การทำงานพร้อมกันของ Wi-Fi STA/STA โดยทำดังนี้
เปิดใช้ฟังก์ชันอย่างน้อย 1 รายการทีละรายการโดยใช้การซ้อนทับทรัพยากรที่รันไทม์ (ปิดใช้โดยค่าเริ่มต้น)
- การสร้างก่อนการหยุดทำงาน
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
- การเชื่อมต่ออินเทอร์เน็ตและเครือข่ายภายในพร้อมกัน
config_wifiMultiStaLocalOnlyConcurrencyEnabled
- การเชื่อมต่ออินเทอร์เน็ตและข้อจำกัดพร้อมกัน
config_wifiMultiStaRestrictedConcurrencyEnabled
- เครือข่ายหลายเครือข่ายที่เชื่อมต่ออินเทอร์เน็ตพร้อมกัน
config_wifiMultiStaMultiInternetConcurrencyEnabled
- การสร้างก่อนการหยุดทำงาน
ตรวจสอบการติดตั้งใช้งานแต่ละรายการตามที่อธิบายไว้ในส่วนที่เกี่ยวข้อง
เราขอแนะนำให้เฟรมเวิร์กและแอปที่ OEM ปรับแต่งใช้NetworkCallback#onCapabilitiesChanged()
method
แทน WifiManager#getConnectionInfo()
เพื่อรองรับการทำงานพร้อมกันของ Wi-Fi STA/STA ได้ดียิ่งขึ้น ซึ่งจะแสดงผลเฉพาะ WifiInfo
สำหรับ
เครือข่ายเดียวและเลิกใช้งานใน Android 12 แล้ว ดูข้อมูลเพิ่มเติมได้ที่Wi-Fi Network Request API สำหรับการเชื่อมต่อแบบเพียร์ทูเพียร์
Make-before-break
ฟังก์ชันMake-Before-Break ช่วยให้อุปกรณ์เชื่อมต่อกับเครือข่าย Wi-Fi ใหม่ได้ ขณะที่ยังคงการเชื่อมต่อเครือข่าย Wi-Fi เดิม โดยจะตัดการเชื่อมต่อจากเครือข่ายเก่า เมื่อเชื่อมต่อกับเครือข่าย Wi-Fi ใหม่และมีสิทธิ์เข้าถึงอินเทอร์เน็ตสำเร็จแล้วเท่านั้น
กรณีการใช้งานแบบ "สร้างก่อนทำลาย" จะช่วยแก้ปัญหาต่อไปนี้ใน Android 11 หรือต่ำกว่า ซึ่งอุปกรณ์ต้องยกเลิกการเชื่อมต่อจากเครือข่าย Wi-Fi ที่มีอยู่ก่อนที่จะเชื่อมต่อกับเครือข่ายใหม่ (ทำลายก่อนสร้าง)
เมื่อเชื่อมต่อกับเครือข่ายใหม่ อุปกรณ์อาจพบว่ารหัสผ่าน Wi-Fi ที่บันทึกไว้ไม่ถูกต้อง หรือเครือข่ายใหม่ไม่มีสิทธิ์เข้าถึงอินเทอร์เน็ต ซึ่งจะบังคับให้อุปกรณ์เปลี่ยนกลับไปใช้เครือข่ายเดิม ทำให้ไม่มีการเชื่อมต่อ Wi-Fi เป็นเวลานาน
เครือข่ายเดิมถูกยกเลิกการเชื่อมต่อกะทันหัน ซึ่งหมายความว่าซ็อกเก็ตทั้งหมดจะปิด แอปมักจะตอบสนองต่อการสูญเสียการเชื่อมต่ออย่างกะทันหันได้ไม่ดี ซึ่งอาจส่งผลให้ผู้ใช้ไม่สามารถเชื่อมต่ออินเทอร์เน็ตได้เป็นเวลา 2-3 วินาทีจนกว่าจะมีการสร้างการเชื่อมต่อใหม่จนเสร็จสมบูรณ์
เครือข่ายเริ่มต้นจะเปลี่ยน 2 ครั้ง จากเครือข่าย Wi-Fi เก่าเป็นเครือข่ายมือถือ แล้วจากเครือข่ายมือถือเป็นเครือข่าย Wi-Fi ใหม่ ซึ่งจะทำให้แอปตอบสนองต่อ การเปลี่ยนแปลงเครือข่าย 2 ครั้ง นอกจากนี้ อุปกรณ์ยังต้องใช้เวลาช่วงสั้นๆ ในการใช้อินเทอร์เน็ตมือถือด้วย
ระบบจะใช้โฟลว์การสลับก่อนหยุดทำงานสำหรับการสลับเครือข่าย Wi-Fi อัตโนมัติที่ระบบปฏิบัติการเริ่มเท่านั้น การสลับเครือข่ายที่ผู้ใช้เริ่มจะใช้โฟลว์การตัดการเชื่อมต่อก่อนสร้างการเชื่อมต่อ ซึ่งระบบจะตัดการเชื่อมต่อเครือข่ายก่อนหน้าอย่างสมบูรณ์ ก่อนที่จะเชื่อมต่อเครือข่ายใหม่ ในบางกรณี ระบบจะใช้โฟลว์ หยุดก่อนเริ่ม แม้ในการสลับอัตโนมัติที่เริ่มต้นโดย ระบบปฏิบัติการ เช่น เมื่อสลับระหว่าง 2 เครือข่ายที่กำหนดค่าให้ใช้ ที่อยู่ MAC จากโรงงานทั้งคู่
แอปสามารถตรวจสอบว่าอุปกรณ์รองรับ Use Case นี้หรือไม่โดยใช้
WifiManager#isMakeBeforeBreakWifiSwitchingSupported()
API
ตรวจสอบความถูกต้องของ Make-Before-Break
หากต้องการตรวจสอบการติดตั้งใช้งาน ให้ทริกเกอร์การสลับเครือข่าย Wi-Fi อัตโนมัติ (โดยตรวจสอบว่ามีเครือข่ายที่มีความแรงของสัญญาณมากกว่าเครือข่ายที่เชื่อมต่ออยู่ ) และยืนยันว่าอุปกรณ์ยังคงการเชื่อมต่อที่มีอยู่ ขณะเชื่อมต่อกับเครือข่ายใหม่ หากต้องการดูสถานะของทั้งอินเทอร์เฟซ Wi-Fi และยืนยันว่าทั้ง 2 อินเทอร์เฟซเชื่อมต่ออยู่ ให้ใช้คำสั่งต่อไปนี้
adb shell wpa_cli -i wlan0 status ; echo ; adb shell wpa_cli -i wlan1 status
หากเครือข่ายใหม่ไม่มีการเชื่อมต่อ อุปกรณ์จะพยายามเชื่อมต่อกับเครือข่ายดังกล่าวในขณะที่ยังคงเชื่อมต่อกับเครือข่ายที่มีอยู่ และจะยกเลิกความพยายามเมื่อตรวจพบว่าเครือข่ายใหม่ไม่มีอินเทอร์เน็ต จากนั้นอุปกรณ์จะใช้ การเชื่อมต่อที่มีอยู่เป็นเครือข่าย Wi-Fi หลักต่อไป
การเชื่อมต่ออินเทอร์เน็ตและเครือข่ายเฉพาะที่พร้อมกัน
ฟังก์ชันการเชื่อมต่ออินเทอร์เน็ตและแบบภายในเท่านั้นพร้อมกันช่วยให้อุปกรณ์เชื่อมต่อกับการเชื่อมต่อแบบภายในเท่านั้น เช่น การเชื่อมต่อกับอุปกรณ์ IoT พร้อมกันกับเครือข่ายหลักที่ให้บริการอินเทอร์เน็ตได้ ฟังก์ชันนี้ช่วยปรับปรุง
ประสบการณ์ของผู้ใช้เมื่อเชื่อมต่อกับอุปกรณ์ IoT โดยตรง เช่น กล้อง
ซึ่งทำได้ผ่าน API ของ WifiNetworkSpecifier
ที่เพิ่มเข้ามาใน
Android 10
ใน Android 11 และเวอร์ชันที่ต่ำกว่า อุปกรณ์จะยกเลิกการเชื่อมต่อจาก เครือข่าย Wi-Fi หลักเมื่อเชื่อมต่อกับอุปกรณ์ IoT ซึ่งส่งผลให้ การเชื่อมต่ออินเทอร์เน็ตขาดหายไป (เว้นแต่ว่าอุปกรณ์จะมีประเภทการรับส่งอื่นที่พร้อมใช้งาน เช่น อินเทอร์เน็ตมือถือ)
แอปสามารถตรวจสอบว่าอุปกรณ์รองรับฟังก์ชันนี้หรือไม่โดยใช้
WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported()
API
ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงฟังก์ชันการเชื่อมต่ออินเทอร์เน็ตและฟังก์ชันเฉพาะในเครื่องพร้อมกันใน Android 12 ได้ที่ API คำขอเครือข่าย Wi-Fi สำหรับการเชื่อมต่อแบบเพียร์ทูเพียร์
ตรวจสอบการเชื่อมต่อเฉพาะเครือข่ายภายในและอินเทอร์เน็ต
หากต้องการตรวจสอบฟังก์ชันนี้ ให้ใช้
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 จ่ายเงินหรือคำแนะนำส่วนตัวของ OEM อุปกรณ์จะเชื่อมต่อกับเครือข่ายนั้นโดยอัตโนมัติเป็นเครือข่ายรอง
ตรวจสอบการเชื่อมต่ออินเทอร์เน็ตและข้อจำกัดพร้อมกัน
หากต้องการตรวจสอบฟังก์ชันนี้ ให้ใช้
MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
การทดสอบ CTS
เครือข่ายหลายเครือข่ายที่เชื่อมต่ออินเทอร์เน็ตพร้อมกัน
ฟีเจอร์เครือข่ายหลายเครือข่ายพร้อมการเชื่อมต่ออินเทอร์เน็ต พร้อมกันพร้อมใช้งานใน Android 13 ขึ้นไป ซึ่งจะช่วยให้อุปกรณ์ เชื่อมต่อกับ 2 เครือข่าย (AP) พร้อมกันได้ โดยทั้ง 2 เครือข่ายจะไม่มีข้อจำกัด (แอปทั้งหมดมีสิทธิ์เข้าถึง) และให้สิทธิ์เข้าถึงอินเทอร์เน็ต
แอปสามารถตรวจสอบว่าอุปกรณ์รองรับฟีเจอร์นี้หรือไม่โดยใช้เมธอด
WifiManager#isStaConcurrencyForMultiInternetSupported()
หากรองรับฟีเจอร์นี้ แอปที่มีสิทธิ์จะเปิดใช้ฟีเจอร์ได้โดยใช้เมธอด
WifiManager#setStaConcurrencyForMultiInternetMode(int mode)
ฟีเจอร์นี้มีโหมดดังนี้
WifiManager#WIFI_MULTI_INTERNET_MODE_DBS_AP
: จำกัดการเชื่อมต่อแบบคู่กับย่านความถี่คู่ของ DBS APWifiManager#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 ให้ใช้หลักเกณฑ์ต่อไปนี้เพื่อรองรับ การทำงานพร้อมกันของ Wi-Fi STA/STA
ชิป Wi-Fi ต้องรองรับการเชื่อมต่อ STA แบบคู่พร้อมกัน ซึ่งหมายความว่าระบบ รองรับสิ่งต่อไปนี้
- อินเทอร์เฟซ STA แต่ละรายการมี MAC ที่ไม่ซ้ำกันซึ่งเฟรมเวิร์กตั้งโปรแกรมได้
- สร้างและทำลายอินเทอร์เฟซ STA รองแบบไดนามิกได้
- STA แต่ละรายการสามารถเชื่อมต่อกับ SSID ที่แตกต่างกันได้ (ไม่ว่าจะอยู่ใน แบนด์เดียวกันหรือแบนด์อื่น)
- STA แต่ละรายการสามารถเชื่อมต่อกับ SSID เดียวกันได้ (ไม่ว่าจะอยู่ในย่านความถี่เดียวกันหรือย่านความถี่อื่น) STA ทั้ง 2 เครื่องต้องไม่เชื่อมต่อกับ BSSID เดียวกัน
ฟีเจอร์ที่สำคัญต้องทำงานในแต่ละอินเทอร์เฟซและต้องพร้อมใช้งานในอินเทอร์เฟซหลัก รายการฟีเจอร์ที่สำคัญมีดังนี้
ต้องรองรับการโรมมิ่งในอินเทอร์เฟซหลักอย่างน้อย (ตั้งค่าโดยใช้
IWifiChip.setMultiStaPrimaryConnection()
) หากรองรับการโรมมิ่งใน ทั้ง 2 อินเทอร์เฟซ การตัดสินใจเกี่ยวกับการเชื่อมต่อหนึ่งต้องไม่ขัดแย้งกับการเชื่อมต่อที่ 2 ที่เกิดขึ้นพร้อมกัน เช่น อินเทอร์เฟซหนึ่งต้องไม่โรมมิ่ง ไปยัง BSSID ของการเชื่อมต่ออื่นAPF (และ Offload อื่นๆ เช่น 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 ที่ทำงานพร้อมกัน 2 รายการอาจทำให้เกิดโหมด MCC, SCC และ DBS ของการทำงาน การติดตั้งใช้งานของผู้ให้บริการจึงต้องเลือกการกำหนดค่าวิทยุที่ดีที่สุดเมื่อเฟรมเวิร์กเรียก
IWifiChip.setMultiStaUseCase()
เพื่อระบุฟังก์ชัน หลักเกณฑ์ทั่วไปมีดังนี้- แนะนำให้ใช้ DBS 2x2+2x2 หากมี
- หลีกเลี่ยงการใช้ 1x1+1x1 DBS หากเป็นไปได้ เนื่องจากจะส่งผลกระทบต่อคุณภาพการเชื่อมต่อมากเกินไป แต่ให้ใช้ MCC แทน
- ผู้ขับขี่หรือเฟิร์มแวร์ต้องกำหนดค่ารอบการทำงานของ MCC สำหรับ
ฟังก์ชันต่างๆ ได้ เฟรมเวิร์กไม่ได้ตั้งค่ารอบการทำงานของ MCC
โดยตรง แต่จะค้นหาข้อมูลนี้โดยใช้
StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent
หากใช้ MCC เราขอแนะนำให้ใช้รอบการทำงานต่อไปนี้ระหว่างการเชื่อมต่อหลัก และการเชื่อมต่อรอง
DUAL_STA_TRANSIENT_PREFER_PRIMARY
: 70% หลัก 30% รองDUAL_STA_NON_TRANSIENT_UNBIASED
: 50% หลัก 50% รอง