STA/STA ของ Wi-Fi ที่เกิดขึ้นพร้อมกัน

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

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

เราขอแนะนำให้เฟรมเวิร์กและแอปที่ 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 ที่จำกัดรอง ให้ทำตามขั้นตอนต่อไปนี้

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

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

เมื่ออุปกรณ์ตรวจพบผลการสแกนที่มีเครือข่ายตรงกับคำแนะนำที่ OEM จ่ายเงินหรือคำแนะนำส่วนตัวของ 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 ให้ใช้หลักเกณฑ์ต่อไปนี้เพื่อรองรับ การทำงานพร้อมกันของ 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% รอง