Android 12 เปิดตัว Wi-Fi STA/STA พร้อมกัน ซึ่งช่วยให้อุปกรณ์เชื่อมต่อกับเครือข่าย Wi-Fi สองเครือข่ายพร้อมกันได้ คุณสมบัติเสริมนี้เปิดใช้งานฟังก์ชันต่อไปนี้
- ทำก่อนเบรก : อุปกรณ์ทำการเชื่อมต่อกับเครือข่าย Wi-Fi ใหม่ก่อนที่จะตัดการเชื่อมต่อที่มีอยู่ ส่งผลให้การเปลี่ยนผ่านราบรื่นขึ้นเมื่อสลับระหว่างเครือข่าย Wi-Fi
- การเชื่อมต่อท้องถิ่นเท่านั้นและอินเทอร์เน็ตพร้อมกัน : อุปกรณ์เชื่อมต่อกับเครือข่ายเฉพาะท้องถิ่นเท่านั้น โดยไม่รบกวนการเชื่อมต่อหลักของอุปกรณ์
- การเชื่อมต่อแบบจำกัดและอินเทอร์เน็ตพร้อมกัน : อุปกรณ์เชื่อมต่อกับเครือข่ายแบบจำกัด (ใช้ได้เฉพาะกับแอปที่มีสิทธิ์ใช้งานบางแอปเท่านั้น) โดยไม่รบกวนการเชื่อมต่อหลักของอุปกรณ์
- (Android 13 หรือสูงกว่า) ใช้งานหลายเครือข่ายพร้อมกันด้วยการเชื่อมต่ออินเทอร์เน็ต : อุปกรณ์เชื่อมต่อกับสองเครือข่ายซึ่งทั้งสองเครือข่ายไม่จำกัดและใช้ได้กับทุกแอป และให้การเชื่อมต่ออินเทอร์เน็ต
หน้านี้อธิบายลักษณะการทำงานของอุปกรณ์เมื่อเปิดใช้งานคุณสมบัตินี้และรายละเอียดการใช้งานสำหรับผู้ผลิตและผู้จำหน่ายอุปกรณ์
การนำไปปฏิบัติ
อุปกรณ์ต้องรองรับสิ่งต่อไปนี้เพื่อใช้งาน Wi-Fi STA/STA พร้อมกัน:
ชิป Wi-Fi หรือเฟิร์มแวร์ต้องรองรับการเชื่อมต่อ STA สองรายการพร้อมกัน เฟิร์มแวร์ต้องรองรับการรวมช่องสัญญาณและแบนด์ทั้งหมดสำหรับการเชื่อมต่อทั้งสอง เพื่อหลีกเลี่ยงปัญหาด้านประสิทธิภาพ เราขอแนะนำให้ใช้ชิป Wi-Fi ที่รองรับ 2x2+2x2 DBS
อุปกรณ์จะต้องรองรับ API ต่อไปนี้ใน ผู้จำหน่าย HAL เวอร์ชัน 1.5
-
IWifiChip.setMultiStaPrimaryConnection()
-
IWifiChip.setMultiStaUseCase()
-
การรวมอินเทอร์เฟซ HAL Wi-Fi ต้องมีอินเทอร์เฟซ STA พร้อมกันสองอินเทอร์เฟซที่ใช้รูปแบบข้อมูลจำเพาะ เช่น
[{STA} <= 2, ...]
สำหรับข้อมูลเพิ่มเติม โปรดดู การทำงานพร้อมกันหลายอินเทอร์เฟซ Wi-Fi
หากตรงตามข้อกำหนดเบื้องต้นเหล่านั้น ให้ใช้ Wi-Fi STA/STA พร้อมกันโดยดำเนินการดังต่อไปนี้:
เปิดใช้งานฟังก์ชันอย่างน้อย 1 รายการโดยใช้ การซ้อนทับทรัพยากรรันไทม์ (ปิดใช้งานโดยค่าเริ่มต้น)
- ทำก่อนเบรก :
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
- การเชื่อมต่อเฉพาะท้องถิ่นและอินเทอร์เน็ตพร้อมกัน :
config_wifiMultiStaLocalOnlyConcurrencyEnabled
- การเชื่อมต่อแบบจำกัดและอินเทอร์เน็ตพร้อมกัน :
config_wifiMultiStaRestrictedConcurrencyEnabled
- พร้อมกันหลายเครือข่ายด้วยการเชื่อมต่ออินเทอร์เน็ต :
config_wifiMultiStaMultiInternetConcurrencyEnabled
- ทำก่อนเบรก :
ตรวจสอบการใช้งานแต่ละรายการตามที่อธิบายไว้ในส่วนที่เกี่ยวข้องด้านล่าง
เพื่อรองรับการทำงานพร้อมกันของ Wi-Fi STA/STA ได้ดียิ่งขึ้น เราขอแนะนำให้เฟรมเวิร์กและแอปที่ OEM กำหนดเองใช้วิธี NetworkCallback#onCapabilitiesChanged()
แทน WifiManager#getConnectionInfo()
ซึ่งจะส่งคืนเฉพาะ WifiInfo
สำหรับเครือข่ายเดียวและเลิกใช้งานใน Android 12 สำหรับข้อมูลเพิ่มเติม โปรดดู API คำขอเครือข่าย Wi-Fi สำหรับการเชื่อมต่อแบบเพียร์ทูเพียร์
ทำ-ก่อน-พัก
ฟังก์ชัน make-before-break ช่วยให้อุปกรณ์เชื่อมต่อกับเครือข่าย Wi-Fi ใหม่ในขณะที่ยังคงการเชื่อมต่อเครือข่าย Wi-Fi ที่มีอยู่ โดยตัดการเชื่อมต่อจากเครือข่ายเก่าเมื่อเชื่อมต่อกับเครือข่าย Wi-Fi ใหม่ได้สำเร็จและมีการเข้าถึงอินเทอร์เน็ตเท่านั้น
กรณีการใช้งานแบบ make-before-break แก้ไขปัญหาต่อไปนี้ใน Android 11 หรือต่ำกว่า โดยที่อุปกรณ์จะต้องยกเลิกการเชื่อมต่อจากเครือข่าย Wi-Fi ที่มีอยู่ก่อนที่จะเชื่อมต่อกับเครือข่ายใหม่ (break-before-make)
เมื่อเชื่อมต่อกับเครือข่ายใหม่ อุปกรณ์อาจพบว่ามีการบันทึกรหัสผ่าน Wi-Fi ไม่ถูกต้อง หรือเครือข่ายใหม่ไม่มีการเชื่อมต่ออินเทอร์เน็ต ซึ่งจะบังคับให้อุปกรณ์เปลี่ยนกลับไปใช้เครือข่ายเก่า ส่งผลให้ต้องใช้เวลานานมากหากไม่มีการเชื่อมต่อ Wi-Fi
เครือข่ายเก่าถูกตัดการเชื่อมต่อกะทันหัน ซึ่งหมายความว่าซ็อกเก็ตทั้งหมดจะถูกปิด แอปมักจะตอบสนองได้ไม่ดีต่อการสูญเสียการเชื่อมต่ออย่างกะทันหัน และอาจทำให้ผู้ใช้ประสบปัญหาหากไม่มีการเชื่อมต่ออินเทอร์เน็ตไม่กี่วินาทีจนกว่าการเชื่อมต่อใหม่จะเสร็จสมบูรณ์
เครือข่ายเริ่มต้นจะเปลี่ยนสองครั้ง จากเครือข่าย Wi-Fi เก่าไปเป็นเครือข่ายมือถือ จากนั้นจากเครือข่ายมือถือไปเป็นเครือข่าย Wi-Fi ใหม่ ซึ่งทำให้แอปตอบสนองต่อการเปลี่ยนแปลงเครือข่ายสองครั้ง อุปกรณ์ต้องใช้เวลาช่วงสั้นๆ ในการใช้ข้อมูลเซลลูลาร์
ขั้นตอนการสร้างก่อนหยุดจะใช้เฉพาะกับสวิตช์เครือข่าย Wi-Fi อัตโนมัติที่เริ่มต้นโดยระบบปฏิบัติการเท่านั้น สวิตช์เครือข่ายที่เริ่มต้นโดยผู้ใช้ใช้โฟลว์การแบ่งก่อนสร้างแบบเดิม โดยที่เครือข่ายก่อนหน้านี้ถูกตัดการเชื่อมต่อโดยสมบูรณ์ก่อนที่เครือข่ายใหม่จะเชื่อมต่อ ในบางกรณี โฟลว์การแบ่งก่อนสร้างจะใช้แม้ในสวิตช์อัตโนมัติที่เริ่มต้นโดยระบบปฏิบัติการ ตัวอย่างเช่น เมื่อสลับระหว่างสองเครือข่ายที่กำหนดค่าให้ใช้ที่อยู่ MAC จากโรงงาน
แอปสามารถตรวจสอบได้ว่าอุปกรณ์รองรับกรณีการใช้งานนี้หรือไม่โดยใช้ WifiManager#isMakeBeforeBreakWifiSwitchingSupported()
API
กำลังตรวจสอบการทำก่อนหยุดพัก
ในการตรวจสอบการใช้งานของคุณ ให้ทริกเกอร์สวิตช์เครือข่าย Wi-Fi อัตโนมัติ (โดยตรวจสอบให้แน่ใจว่ามีเครือข่ายที่มีความแรงของสัญญาณที่แรงกว่าเครือข่ายที่เชื่อมต่ออยู่ในปัจจุบัน) และตรวจสอบว่าอุปกรณ์รักษาการเชื่อมต่อที่มีอยู่ในขณะที่เชื่อมต่อกับเครือข่ายใหม่ หากต้องการดูสถานะของอินเทอร์เฟซ Wi-Fi ทั้งสองและตรวจสอบว่าเชื่อมต่อทั้งคู่แล้ว ให้ใช้คำสั่งต่อไปนี้
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 โปรดดู API คำขอเครือข่าย Wi-Fi สำหรับการเชื่อมต่อแบบเพียร์ทูเพียร์
กำลังตรวจสอบการเชื่อมต่อเฉพาะท้องถิ่นและอินเทอร์เน็ต
ในการตรวจสอบฟังก์ชันนี้ ให้ใช้การทดสอบ CTS และ ACTS ต่อไปนี้:
- CTS:
MultiStaConcurrencyWifiNetworkSpecifierTest
- การกระทำ:
WifiStaConcurrencyNetworkRequestTest
การเชื่อมต่อแบบจำกัดและอินเทอร์เน็ตพร้อมกัน
ฟังก์ชัน การเชื่อมต่ออินเทอร์เน็ตแบบจำกัดพร้อมกัน ช่วยให้อุปกรณ์เชื่อมต่อกับเครือข่าย 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 อุปกรณ์จะเชื่อมต่อกับเครือข่ายรองโดยอัตโนมัติ
กำลังตรวจสอบการเชื่อมต่อแบบจำกัดและอินเทอร์เน็ตพร้อมกัน
ในการตรวจสอบฟังก์ชันนี้ ให้ใช้การทดสอบ CTS และ ACTS ต่อไปนี้:
- CTS:
MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
- การกระทำ:
WifiStaConcurrencyNetworkRequestTest
พร้อมกันหลายเครือข่ายพร้อมการเชื่อมต่ออินเทอร์เน็ต
ใช้งานได้กับ Android 13 ขึ้นไป โดยหลายเครือข่ายพร้อมฟีเจอร์การเชื่อมต่ออินเทอร์เน็ต ช่วยให้อุปกรณ์เชื่อมต่อกับเครือข่าย (AP) สองเครือข่ายพร้อมกัน ซึ่งทั้งสองเครือข่ายไม่จำกัด (แอปทั้งหมดมีสิทธิ์เข้าถึง) และให้การเข้าถึงอินเทอร์เน็ต
แอปสามารถตรวจสอบได้ว่าอุปกรณ์รองรับฟีเจอร์นี้หรือไม่โดยใช้เมธอด WifiManager#isStaConcurrencyForMultiInternetSupported()
หากคุณสมบัตินี้ได้รับการสนับสนุน แอพที่มีสิทธิ์จะสามารถเปิดใช้งานคุณสมบัตินี้ได้โดยใช้เมธอด WifiManager#setStaConcurrencyForMultiInternetMode(int mode)
คุณลักษณะนี้มีโหมดดังต่อไปนี้:
-
WifiManager#WIFI_MULTI_INTERNET_MODE_DBS_AP
: จำกัดการเชื่อมต่อแบบคู่กับย่านความถี่คู่ของ DBS AP -
WifiManager#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 ทั้งสองจะต้อง ไม่ เชื่อมต่อกับ BSSID เดียวกัน
คุณลักษณะที่สำคัญจะต้องทำงานบนพื้นฐานต่ออินเทอร์เฟซ และต้องพร้อมใช้งานบนอินเทอร์เฟซหลัก ต่อไปนี้เป็นรายการคุณลักษณะที่สำคัญเหล่านี้:
การโรมมิ่งต้องได้รับการสนับสนุนบนอินเทอร์เฟซหลักอย่างน้อย (ตั้งค่าโดยใช้
IWifiChip.setMultiStaPrimaryConnection()
) หากการโรมมิ่งได้รับการสนับสนุนบนอินเทอร์เฟซทั้งสอง การตัดสินใจในการเชื่อมต่อหนึ่งจะต้องไม่ขัดแย้งกับการเชื่อมต่อพร้อมกันครั้งที่สอง ตัวอย่างเช่น อินเทอร์เฟซหนึ่งต้องไม่โรมมิ่งไปยัง 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
: ระบุ การเชื่อมต่อเฉพาะท้องถิ่นและอินเทอร์เน็ตพร้อมกัน หรือฟังก์ชัน การเชื่อมต่ออินเทอร์เน็ตแบบจำกัดและจำกัดพร้อมกัน คุณภาพของการเชื่อมต่อทั้งสองจะต้องจัดลำดับความสำคัญเท่ากัน
-
เนื่องจาก STA ที่ใช้งานพร้อมกันแบบคู่สามารถนำไปสู่โหมดการทำงาน MCC, SCC และ DBS ได้ การใช้งานผู้จำหน่ายจึงต้องเลือกการกำหนดค่าวิทยุที่ดีที่สุดเมื่อเฟรมเวิร์กเรียก
IWifiChip.setMultiStaUseCase()
เพื่อระบุฟังก์ชัน ต่อไปนี้เป็นแนวทางทั่วไป:- แนะนำให้ใช้ 2x2+2x2 DBS หากมี
- หลีกเลี่ยง 1x1+1x1 DBS หากเป็นไปได้ เนื่องจากมีผลกระทบต่อคุณภาพการเชื่อมต่อมากเกินไป ให้เลือก MCC แทน
- รอบหน้าที่ของ MCC จะต้องกำหนดค่าโดยไดรเวอร์หรือเฟิร์มแวร์สำหรับฟังก์ชันต่างๆ กรอบงานไม่ได้ตั้งค่ารอบหน้าที่ของ MCC โดยตรง แต่สอบถามข้อมูลนี้โดยใช้
StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent
หากใช้ MCC เราขอแนะนำรอบการทำงานต่อไปนี้ระหว่างการเชื่อมต่อหลักและรอง:
-
DUAL_STA_TRANSIENT_PREFER_PRIMARY
: หลัก 70%, รอง 30% -
DUAL_STA_NON_TRANSIENT_UNBIASED
: 50% หลัก, 50% รอง
-