การเชื่อมต่อ Wi-Fi STA/STA พร้อมกัน

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. เปิดใช้ฟังก์ชันอย่างน้อย 1 รายการทีละรายการโดยใช้การวางซ้อนทรัพยากรรันไทม์ (ปิดใช้โดยค่าเริ่มต้น)

    • Make-before-break: config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • การเชื่อมต่ออินเทอร์เน็ตเฉพาะในตัวเท่านั้น: config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • การเชื่อมต่ออินเทอร์เน็ตและการเชื่อมต่อแบบจำกัดพร้อมกัน config_wifiMultiStaRestrictedConcurrencyEnabled
    • เครือข่ายหลายเครือข่ายที่มีการเชื่อมต่ออินเทอร์เน็ตพร้อมกัน config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. ตรวจสอบการติดตั้งใช้งานแต่ละรายการตามที่อธิบายไว้ในส่วนที่เกี่ยวข้อง

เพื่อให้รองรับการเกิดขึ้นพร้อมกันของ 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 รองที่มีข้อจำกัด ให้ทำตามขั้นตอนต่อไปนี้

  1. เพิ่มคำแนะนำเครือข่าย Wi-Fi โดยตั้งค่า setOemPaid หรือ setOemPrivate เป็น "จริง"

  2. ใน ConnectivityManager ให้ยื่นNetworkRequestที่มีความสามารถต่อไปนี้

เมื่ออุปกรณ์ตรวจพบผลการสแกนที่มีเครือข่ายที่ตรงกับเครือข่ายแบบชำระเงินหรือเครือข่ายส่วนตัวที่แนะนำของ OEM อุปกรณ์จะเชื่อมต่อกับเครือข่ายดังกล่าวโดยอัตโนมัติเป็นเครือข่ายรอง

ตรวจสอบการเชื่อมต่ออินเทอร์เน็ตแบบจำกัดและพร้อมกัน

หากต้องการตรวจสอบฟังก์ชันนี้ ให้ใช้ MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest การทดสอบ CTS

เครือข่ายหลายเครือข่ายที่มีการเชื่อมต่ออินเทอร์เน็ตพร้อมกัน

ฟีเจอร์การเชื่อมต่อเครือข่ายหลายเครือข่ายพร้อมกันที่มีการเชื่อมต่ออินเทอร์เน็ตพร้อมใช้งานใน Android 13 ขึ้นไป ซึ่งช่วยให้อุปกรณ์เชื่อมต่อกับเครือข่าย 2 เครือข่าย (AP) ได้พร้อมกัน โดยทั้ง 2 เครือข่ายนี้ไม่มีข้อจำกัด (แอปทั้งหมดมีสิทธิ์เข้าถึง) และมีการเชื่อมต่ออินเทอร์เน็ต

แอปสามารถตรวจสอบว่าอุปกรณ์รองรับฟีเจอร์นี้หรือไม่โดยใช้วิธี WifiManager#isStaConcurrencyForMultiInternetSupported()

หากระบบรองรับฟีเจอร์นี้ แอปที่ได้รับสิทธิ์จะเปิดใช้ฟีเจอร์ได้โดยใช้เมธอด WifiManager#setStaConcurrencyForMultiInternetMode(int mode) ฟีเจอร์นี้มีโหมดต่อไปนี้

หากต้องการค้นหาโหมดฟีเจอร์ที่ใช้งานอยู่ในปัจจุบัน ให้ใช้วิธี WifiManager#getStaConcurrencyForMultiInternetMode()

เมื่อเปิดใช้ฟีเจอร์แล้ว ให้ทำตามขั้นตอนต่อไปนี้เพื่อขอเครือข่าย Wi-Fi เพิ่มเติมที่ให้บริการอินเทอร์เน็ต

  1. สร้างตัวระบุเครือข่าย Wi-Fi โดยใช้ WifiNetworkSpecifier.Builder เลือกย่านความถี่สำหรับตัวระบุโดยใช้วิธี setBand() อย่าระบุ SSID หรือ BSSID เนื่องจากเฟรมเวิร์ก Wi-Fi จะเลือกเครือข่ายเพิ่มเติมสำหรับย่านความถี่ที่ระบุ

  2. ใช้ ConnectivityManager เพื่อสร้าง NetworkRequest ที่มีความสามารถ NET_CAPABILITY_INTERNET

  3. เพิ่มตัวระบุลงในคําขอเครือข่ายพร้อมกับอินสแตนซ์ 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% รอง