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

Android 12 เปิดตัว Wi-Fi STA/STA พร้อมกัน ซึ่งช่วยให้อุปกรณ์เชื่อมต่อเครือข่าย 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 พร้อมกัน

หากเป็นไปตามข้อกำหนดเบื้องต้นเหล่านั้นแล้ว ให้ใช้ Wi-Fi STA/STA พร้อมกันโดยทำตามขั้นตอนต่อไปนี้

  1. เปิดใช้อย่างน้อย 1 ฟังก์ชันแยกกันโดยใช้การวางซ้อนทรัพยากรรันไทม์ (ปิดใช้โดยค่าเริ่มต้น)

    • สร้างคอนเทนต์ก่อนหยุดพัก: 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 สำหรับการเชื่อมต่อแบบเพียร์ทูเพียร์

แต่งหน้าก่อนหยุดพัก

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

กรณีการใช้งานแบบ "เลือกก่อนหยุดพัก" จะจัดการกับปัญหาต่อไปนี้ใน Android 11 หรือต่ำกว่า ซึ่งก็คือการที่อุปกรณ์ต้องยกเลิกการเชื่อมต่อกับเครือข่าย Wi-Fi ที่มีอยู่ก่อนที่จะเชื่อมต่อกับเครือข่ายใหม่ (หยุดพักก่อนการทำ)

  • เมื่อเชื่อมต่อกับเครือข่ายใหม่ อุปกรณ์อาจพบว่ามีการบันทึกรหัสผ่าน Wi-Fi ที่ไม่ถูกต้องหรือเครือข่ายใหม่ไม่มีการเข้าถึงอินเทอร์เน็ต ซึ่งจะบังคับให้อุปกรณ์เปลี่ยนกลับไปใช้เครือข่ายเก่า ทำให้ต้องใช้เวลาระยะหนึ่งหากไม่มีการเชื่อมต่อ Wi-Fi

  • ยกเลิกการเชื่อมต่อเครือข่ายเก่าอย่างกะทันหัน ซึ่งหมายความว่าเต้ารับทั้งหมดถูกปิด แอปมักตอบสนองได้ไม่ดีต่อการสูญเสียการเชื่อมต่ออย่างกะทันหัน ซึ่งอาจทำให้ผู้ใช้ไม่สามารถเชื่อมต่ออินเทอร์เน็ตได้หลายวินาทีจนกว่าจะทำการเชื่อมต่อใหม่ได้สำเร็จ

  • เครือข่ายเริ่มต้นจะเปลี่ยน 2 ครั้งจากเครือข่าย Wi-Fi เดิมเป็นเครือข่ายมือถือ จากนั้นจากเครือข่ายมือถือเป็นเครือข่าย Wi-Fi ใหม่ ซึ่งทำให้แอปตอบสนองต่อ การเปลี่ยนแปลงเครือข่าย 2 ครั้ง อุปกรณ์ต้องใช้ระยะเวลาสั้นๆ โดยใช้ข้อมูลมือถือด้วย

ขั้นตอนการสร้างก่อนหยุดพักจะใช้เฉพาะกับสวิตช์เครือข่าย Wi-Fi อัตโนมัติที่เริ่มต้นโดยระบบปฏิบัติการเท่านั้น สวิตช์เครือข่ายที่เริ่มต้นโดยผู้ใช้จะใช้ขั้นตอน "หยุดพักก่อนสร้าง" แบบเดิม ซึ่งเครือข่ายเดิมจะยกเลิกการเชื่อมต่อโดยสมบูรณ์ก่อนที่จะเชื่อมต่อกับเครือข่ายใหม่ ในบางกรณี จะมีการใช้ขั้นตอน "หยุดพักก่อนสร้าง" แม้ในสวิตช์อัตโนมัติที่เริ่มต้นโดยระบบปฏิบัติการ เช่น เมื่อสลับระหว่าง 2 เครือข่ายซึ่งกำหนดค่าให้ใช้ที่อยู่ MAC จากโรงงาน

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

ตรวจสอบการแต่งหน้าก่อนหยุดพัก

หากต้องการตรวจสอบการใช้งาน ให้ทริกเกอร์สวิตช์เครือข่าย 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 สำหรับการเชื่อมต่อระหว่างเครื่อง

ตรวจสอบการเชื่อมต่ออินเทอร์เน็ตเฉพาะในตัวเครื่องและการเชื่อมต่ออินเทอร์เน็ต

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

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

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

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

หากต้องการอนุญาตให้อุปกรณ์เชื่อมต่อกับเครือข่าย Wi-Fi สำรองที่จำกัด ให้ทำตามขั้นตอนต่อไปนี้

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

  2. ใน ConnectivityManager ให้ส่ง NetworkRequest ที่มีความสามารถที่เกี่ยวข้องดังนี้

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

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

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

เชื่อมต่อหลายเครือข่ายพร้อมกัน

พร้อมใช้งานใน 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() ในออบเจ็กต์ Callback

ตรวจสอบเครือข่ายหลายรายการพร้อมกันด้วยการเชื่อมต่ออินเทอร์เน็ต

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

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

หลักเกณฑ์ของชิป Wi-Fi ของผู้ให้บริการ

สำหรับผู้ให้บริการชิป Wi-Fi ให้ใช้หลักเกณฑ์ต่อไปนี้เพื่อรองรับการเกิดขึ้นพร้อมกันของ Wi-Fi STA/STA

ชิป Wi-Fi ต้องรองรับการเชื่อมต่อ STA แบบ 2 เครื่องพร้อมกัน ซึ่งหมายความว่า แอปรองรับสิ่งต่อไปนี้

  • อินเทอร์เฟซ STA แต่ละรายการมี MAC ที่ไม่ซ้ำกันซึ่งสามารถตั้งโปรแกรมได้โดยเฟรมเวิร์ก
  • คุณสร้างและทำลายอินเทอร์เฟซ STA รองแบบไดนามิกได้
  • STA แต่ละรายการจะเชื่อมต่อกับ SSID ที่ต่างกันได้ (ภายในย่านความถี่เดียวกันหรือย่านความถี่อื่น)
  • STA แต่ละรายการสามารถเชื่อมต่อกับ SSID เดียวกัน (ภายในย่านความถี่เดียวกันหรือย่านความถี่อื่น) STA ทั้ง 2 รายการต้องไม่เชื่อมต่อกับ BSSID เดียวกัน

ฟีเจอร์ที่สำคัญต้องทำงานแบบทีละอินเทอร์เฟซและต้องพร้อมใช้งานในอินเทอร์เฟซหลัก รายการฟีเจอร์ที่สำคัญเหล่านี้มีดังนี้

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

    • แนะนำให้ใช้ 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%