Android 12 เปิดตัวการทำงานพร้อมกันของ STA/STA ของ Wi-Fi ซึ่งช่วยให้อุปกรณ์เชื่อมต่อกับเครือข่าย Wi-Fi 2 เครือข่ายพร้อมกันได้ ฟีเจอร์ที่ไม่บังคับนี้เปิดใช้ฟังก์ชันต่อไปนี้
- เชื่อมต่อก่อนตัดการเชื่อมต่อ: อุปกรณ์จะเชื่อมต่อกับเครือข่าย 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 พร้อมกัน
หากมีคุณสมบัติตรงตามข้อกําหนดเบื้องต้นเหล่านั้น ให้ใช้ STA/STA พร้อมกันของ Wi-Fi โดยทําดังนี้
เปิดใช้ฟังก์ชันอย่างน้อย 1 รายการทีละรายการโดยใช้การวางซ้อนทรัพยากรรันไทม์ (ปิดใช้โดยค่าเริ่มต้น)
- Make-before-break:
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
- การเชื่อมต่ออินเทอร์เน็ตเฉพาะในตัวเท่านั้น:
config_wifiMultiStaLocalOnlyConcurrencyEnabled
- การเชื่อมต่ออินเทอร์เน็ตและการเชื่อมต่อแบบจำกัดพร้อมกัน
config_wifiMultiStaRestrictedConcurrencyEnabled
- เครือข่ายหลายเครือข่ายที่มีการเชื่อมต่ออินเทอร์เน็ตพร้อมกัน
config_wifiMultiStaMultiInternetConcurrencyEnabled
- Make-before-break:
ตรวจสอบการติดตั้งใช้งานแต่ละรายการตามที่อธิบายไว้ในส่วนที่เกี่ยวข้อง
เพื่อให้รองรับการเกิดขึ้นพร้อมกันของ Wi-Fi STA/STA ได้ดียิ่งขึ้น เราขอแนะนำให้เฟรมเวิร์กและแอปที่กำหนดโดย OEM ใช้เมธอด NetworkCallback#onCapabilitiesChanged()
แทน WifiManager#getConnectionInfo()
ซึ่งแสดงผลเพียง WifiInfo
สำหรับเครือข่ายเดียวและเลิกใช้งานไปแล้วใน Android 12 ดูข้อมูลเพิ่มเติมที่หัวข้อWi-Fi Network Request API สำหรับการเชื่อมต่อแบบ peer-to-peer
แต่งหน้าก่อนหยุดพัก
ฟังก์ชันหยุดพักก่อนพักช่วยให้อุปกรณ์เชื่อมต่อกับเครือข่าย 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% รอง