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

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

  • Make-before-break: อุปกรณ์จะสร้างการเชื่อมต่อกับเครือข่าย Wi-Fi ใหม่ก่อนที่จะยกเลิกการเชื่อมต่อที่มีอยู่ ซึ่งจะช่วยให้การเปลี่ยนไปมาระหว่างเครือข่าย Wi-Fi เป็นไปอย่างราบรื่นยิ่งขึ้น
  • การเชื่อมต่ออินเทอร์เน็ตและการเชื่อมต่อเฉพาะเครือข่ายภายในพร้อมกัน: อุปกรณ์จะเชื่อมต่อกับเครือข่ายเฉพาะเครือข่ายภายในโดยไม่รบกวนการเชื่อมต่อหลักที่ให้อินเทอร์เน็ตของอุปกรณ์
  • การเชื่อมต่ออินเทอร์เน็ตและการเชื่อมต่อเครือข่ายที่จำกัดพร้อมกัน: อุปกรณ์จะเชื่อมต่อกับเครือข่ายที่จำกัด (ใช้ได้เฉพาะกับแอปบางแอปที่มีสิทธิ์) โดยไม่รบกวนการเชื่อมต่อหลักที่ให้อินเทอร์เน็ตของอุปกรณ์
  • (Android 13 ขึ้นไป) การเชื่อมต่อเครือข่ายหลายเครือข่ายพร้อมกันด้วยการเชื่อมต่ออินเทอร์เน็ต: อุปกรณ์จะเชื่อมต่อกับเครือข่าย 2 เครือข่าย ซึ่งทั้ง 2 เครือข่ายไม่มีข้อจำกัดและแอปทั้งหมดเข้าถึงได้ รวมถึงให้การเชื่อมต่ออินเทอร์เน็ต

หน้านี้อธิบายลักษณะการทำงานของอุปกรณ์เมื่อเปิดใช้ฟีเจอร์นี้ รวมถึงรายละเอียดการใช้งานสำหรับผู้ผลิตและผู้จำหน่ายอุปกรณ์

การใช้งาน

อุปกรณ์ต้องรองรับสิ่งต่อไปนี้จึงจะใช้งานการทำงานพร้อมกันของ Wi-Fi STA/STA ได้

  • ชิปหรือเฟิร์มแวร์ Wi-Fi ต้องรองรับการเชื่อมต่อ STA พร้อมกัน 2 รายการ เฟิร์มแวร์ต้องรองรับการผสมผสานช่องสัญญาณและแบนด์ทั้งหมดสำหรับการเชื่อมต่อทั้ง 2 รายการ เราขอแนะนำให้ใช้ชิป Wi-Fi ที่รองรับ 2x2+2x2 DBS เพื่อหลีกเลี่ยงปัญหาด้านประสิทธิภาพ

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

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

เราขอแนะนำให้เฟรมเวิร์กและแอปที่ OEM ปรับแต่งใช้เมธอด NetworkCallback#onCapabilitiesChanged() แทน WifiManager#getConnectionInfo() ซึ่งจะแสดงผล WifiInfo สำหรับเครือข่ายเดียวเท่านั้นและเลิกใช้งานแล้วใน Android 12 เพื่อรองรับการทำงานพร้อมกันของ Wi-Fi STA/STA ได้ดียิ่งขึ้น ดูข้อมูลเพิ่มเติมได้ที่ Wi-Fi Network Request API สำหรับการเชื่อมต่อแบบเพียร์ทูเพียร์

Make-before-break

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

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

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

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

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

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

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

ตรวจสอบ 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 โดยตรง เช่น กล้อง ซึ่งทำได้ผ่าน API WifiNetworkSpecifier ที่เพิ่มเข้ามาใน Android 10

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

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

ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงฟังก์ชันการเชื่อมต่ออินเทอร์เน็ตและการเชื่อมต่อเฉพาะเครือข่ายภายในพร้อมกันใน Android 12 ได้ที่ Wi-Fi Network Request API สำหรับการเชื่อมต่อแบบเพียร์ทูเพียร์

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

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

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

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

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

หากต้องการเปิดใช้อุปกรณ์ให้เชื่อมต่อกับเครือข่าย 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. สร้าง NetworkRequest ที่มีความสามารถ NET_CAPABILITY_INTERNET โดยใช้ ConnectivityManager

  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 เดียวกัน

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

  • ต้องรองรับการโรมมิ่งในอินเทอร์เฟซหลักอย่างน้อย (ตั้งค่าโดยใช้ 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%