ตำแหน่งของ Wi-Fi: ที่มี RTT

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

ถ้าคุณวัดระยะทางไปยังจุดเข้าใช้งาน 3 จุดขึ้นไป คุณสามารถใช้ แบบหลายมุมมอง เพื่อคาดคะเนตำแหน่งของอุปกรณ์ที่เหมาะกับความต้องการนั้นมากที่สุด การวัดค่าต่างๆ โดยปกติแล้ว ผลลัพธ์จะมีความแม่นยำภายใน 1-2 เมตร

ความแม่นยำนี้ช่วยให้คุณพัฒนาบริการตามตำแหน่งที่ละเอียดยิ่งขึ้นได้ เช่น การนำทางในอาคาร การควบคุมด้วยเสียงที่กำจัดความกำกวม (เช่น "เปิดไฟนี้") และข้อมูลตามตำแหน่ง (เช่น "มีข้อเสนอพิเศษสำหรับผลิตภัณฑ์นี้ไหม")

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

RTT ของ Wi-Fi และการวัดเวลาอย่างละเอียด (FTM) ที่เกี่ยวข้อง ที่กำหนดโดยมาตรฐาน IEEE 802.11-2016 RTT ของ Wi-Fi ต้องใช้เวลาที่แม่นยำ จาก FTM เนื่องจากจะคำนวณระยะทางระหว่าง โดยการวัดเวลาที่แพ็กเก็ตใช้เดินทางไปมาระหว่าง อื่นๆ แล้วนำเวลานั้นไปคูณกับความเร็วแสง

Android 15 (API ระดับ 35) รองรับการระบุระยะแบบไม่ใช้ทริกเกอร์ (NTB) ของ IEEE 802.11az

ความแตกต่างในการใช้งานตามเวอร์ชันของ Android

RTT ของ Wi-Fi เปิดตัวใน Android 9 (API ระดับ 28) เมื่อใช้โปรโตคอลนี้เพื่อระบุตำแหน่งของอุปกรณ์โดยใช้การหาตำแหน่งด้วยวิธีหลายจุดกับอุปกรณ์ที่ใช้ Android 9 คุณต้องมีสิทธิ์เข้าถึงข้อมูลตำแหน่งของจุดเข้าใช้งาน (AP) ที่กําหนดไว้ล่วงหน้าในแอป โดยคุณเลือกวิธีจัดเก็บและเรียกข้อมูลนี้ได้

ในอุปกรณ์ที่ใช้ Android 10 (API ระดับ 29) ขึ้นไป ข้อมูลตำแหน่ง AP จะแสดงเป็นออบเจ็กต์ ResponderLocation ซึ่งประกอบด้วยละติจูด ลองจิจูด และระดับความสูง สำหรับ AP ที่ใช้ RTT ของ Wi-Fi ที่รองรับข้อมูลการกำหนดค่าตำแหน่ง/รายงานข้อมูลประชากรของสถานที่ตั้ง (ข้อมูล LCI/LCR) โปรโตคอลจะแสดงผลออบเจ็กต์ ResponderLocation ในระหว่างกระบวนการหาระยะสัญญาณ

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

การรองรับระยะ NTB ของ IEEE 802.11az พร้อมใช้งานในอุปกรณ์ที่ใช้ Android 15 (API ระดับ 35) ขึ้นไป ซึ่งหมายความว่าหากอุปกรณ์รองรับ IEEE 802.11az โหมดผู้เริ่ม NTB (ระบุโดย WifiRttManager.CHARACTERISTICS_KEY_BOOLEAN_NTB_INITIATOR), แอปของคุณสามารถค้นหา AP ทั้ง IEEE 802.11mc และ IEEE 802.11az ได้ด้วย คำขอช่วง ขยาย RangingResult API เพื่อให้ข้อมูล เกี่ยวกับค่าต่ำสุดและสูงสุดที่สามารถใช้เป็นช่วงเวลาระหว่าง การวัดระยะต่างๆ โดยปล่อยให้มีช่วงเวลาที่แน่นอนในการควบคุมแอป

ข้อกำหนด

  • ฮาร์ดแวร์ของอุปกรณ์ที่ส่งคำขอช่วงสัญญาณต้องใช้มาตรฐาน FTM 802.11-2016 หรือมาตรฐาน 802.11az (การระบุระยะสัญญาณที่ไม่อิงตามทริกเกอร์)
  • อุปกรณ์ที่ส่งคำขอช่วงสัญญาณต้องใช้ Android 9 (ระดับ API 28) ขึ้นไป อุปกรณ์ที่ใช้ Android 15 (API ระดับ 35) ขึ้นไปจะเปิดใช้การวัดระยะทางแบบไม่ใช้ทริกเกอร์ตามมาตรฐาน IEEE 802.11az
  • อุปกรณ์ที่ส่งคำขอช่วงสัญญาณต้องเปิดใช้บริการตำแหน่งและเปิดการสแกน Wi-Fi (ในส่วนการตั้งค่า > ตำแหน่ง)
  • หากแอปที่ส่งคำขอช่วงกำหนดเป้าหมายเป็น Android 13 (API ระดับ 33) ขึ้นไป แอปนั้นต้องมีสิทธิ์ NEARBY_WIFI_DEVICES หากแอปดังกล่าวกำหนดเป้าหมายเป็น Android เวอร์ชันเก่า แอปจะต้องมีสิทธิ์ ACCESS_FINE_LOCATION แทน
  • แอปต้องค้นหาช่วงของจุดเข้าใช้งานในขณะที่แอปปรากฏหรืออยู่ใน บริการที่ทำงานอยู่เบื้องหน้า แอปไม่สามารถเข้าถึงข้อมูลตำแหน่งจาก เบื้องหลัง
  • จุดเข้าใช้งานต้องใช้มาตรฐาน IEEE 802.11-2016 FTM หรือ IEEE มาตรฐาน 802.11az (ระยะที่ไม่ใช่ทริกเกอร์)

ตั้งค่า

หากต้องการตั้งค่าแอปให้ใช้ Wi-Fi RTT ให้ทําตามขั้นตอนต่อไปนี้

1. ขอสิทธิ์

ขอสิทธิ์ต่อไปนี้ในไฟล์ Manifest ของแอป

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- If your app targets Android 13 (API level 33)
     or higher, you must declare the NEARBY_WIFI_DEVICES permission. -->
<uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES"
                 <!-- If your app derives location information from Wi-Fi APIs,
                      don't include the "usesPermissionFlags" attribute. -->
                 android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
                 <!-- If any feature in your app relies on precise location
                      information, don't include the "maxSdkVersion"
                      attribute. -->
                 android:maxSdkVersion="32" />

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

2. ตรวจสอบว่าอุปกรณ์รองรับ Wi-Fi RTT หรือไม่

หากต้องการตรวจสอบว่าอุปกรณ์รองรับ RTT ของ Wi-Fi หรือไม่ ให้ใช้ PackageManager API:

Kotlin

context.packageManager.hasSystemFeature(PackageManager.FEATURE_WIFI_RTT)

Java

context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI_RTT);

3. ตรวจสอบว่า Wi-Fi RTT พร้อมใช้งานหรือไม่

อุปกรณ์อาจมี RTT ของ Wi-Fi แต่อาจใช้งานไม่ได้เนื่องจากผู้ใช้ปิดใช้ Wi-Fi อุปกรณ์บางรุ่นอาจไม่รองรับ Wi-Fi RTT หากมีการใช้ SoftAP หรือการเทอร์เทอร์ ทั้งนี้ขึ้นอยู่กับความสามารถของฮาร์ดแวร์และเฟิร์มแวร์ หากต้องการตรวจสอบว่า RTT ผ่าน Wi-Fi พร้อมใช้งานหรือไม่ ให้โทรไปที่ isAvailable()

ความพร้อมใช้งานของ RTT ของ Wi-Fi อาจเปลี่ยนแปลงได้ทุกเมื่อ แอปของคุณควรลงทะเบียน BroadcastReceiver ที่จะได้รับ ACTION_WIFI_RTT_STATE_CHANGED ซึ่งจะส่งเมื่อมีการเปลี่ยนแปลงความพร้อมจำหน่ายสินค้า เมื่อแอปของคุณได้รับ Intent ของการส่งข้อมูล แอปควรตรวจสอบสถานะความพร้อมปัจจุบันและปรับลักษณะการทํางานตามความเหมาะสม

เช่น

Kotlin

val filter = IntentFilter(WifiRttManager.ACTION_WIFI_RTT_STATE_CHANGED)
val myReceiver = object: BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {
        if (wifiRttManager.isAvailable) {
            …
        } else {
            …
        }
    }
}
context.registerReceiver(myReceiver, filter)

Java

IntentFilter filter =
    new IntentFilter(WifiRttManager.ACTION_WIFI_RTT_STATE_CHANGED);
BroadcastReceiver myReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (wifiRttManager.isAvailable()) {
            …
        } else {
            …
        }
    }
};
context.registerReceiver(myReceiver, filter);

ดูข้อมูลเพิ่มเติมได้ในประกาศ

สร้างคำขอกำหนดระยะ

คำขอระยะ สร้าง (RangingRequest) แล้ว ด้วยการระบุรายการ AP หรือแอปเทียบเท่า Wi-Fi Aware ที่มีช่วง สามารถระบุจุดเข้าใช้งานหลายจุดหรือแอปเทียบเท่า Wi-Fi Aware ได้ใน คำขอระยะเดียว ระยะทางไปยังอุปกรณ์ทั้งหมดจะได้รับการวัดและส่งคืน

ตัวอย่างเช่น คำขอสามารถใช้ฟิลด์ addAccessPoint() วิธีระบุจุดเข้าใช้งานที่ใช้วัดระยะทาง

Kotlin

val req: RangingRequest = RangingRequest.Builder().run {
    addAccessPoint(ap1ScanResult)
    addAccessPoint(ap2ScanResult)
    build()
}

Java

RangingRequest.Builder builder = new RangingRequest.Builder();
builder.addAccessPoint(ap1ScanResult);
builder.addAccessPoint(ap2ScanResult);

RangingRequest req = builder.build();

ระบบจะระบุจุดเข้าใช้งานด้วยออบเจ็กต์ ScanResult ซึ่งรับได้โดยเรียกใช้ WifiManager.getScanResults() คุณสามารถใช้ addAccessPoints(List<ScanResult>) เพื่อเพิ่มจุดเข้าใช้งานหลายจุดในกลุ่ม

ออบเจ็กต์ ScanResult มีทั้ง IEEE 802.11mc (is80211mcResponder()) และ รองรับช่วงที่ไม่ใช่ทริกเกอร์ IEEE 802.11az (is80211azNtbResponder()) AP อุปกรณ์ที่รองรับระยะ IEEE 802.11az NTB จะทํางานได้ทั้ง 802.11mc หรือ ช่วง 802.11az ตามความสามารถของ AP โดยมีค่าเริ่มต้นเป็น 802.11az เมื่อ AP รองรับทั้ง 2 แบบ อุปกรณ์ที่ไม่รองรับ IEEE 802.11az จะทำการจับคู่ทั้งหมดโดยใช้โปรโตคอล IEEE 802.11mc

ในทำนองเดียวกัน คำขอกำหนดระยะจะสามารถเพิ่มเพียร์ Wi-Fi Aware โดยใช้ MAC ของ Wi-Fi ของเครื่อง ที่อยู่หรือ PeerHandle โดยใช้ เวลา addWifiAwarePeer(MacAddress peer) และ addWifiAwarePeer(PeerHandle peer) ตามลำดับ ดูข้อมูลเพิ่มเติมเกี่ยวกับการค้นหาอุปกรณ์ที่เปิดใช้ Wi-Fi Aware ได้ที่เอกสารประกอบเกี่ยวกับ Wi-Fi Aware

ระยะคำขอ

แอปส่งคําขอช่วงโดยใช้เมธอด WifiRttManager.startRanging() และระบุข้อมูลต่อไปนี้ RangingRequest เพื่อระบุการดําเนินการ Executor เพื่อระบุบริบทการเรียกกลับ และ RangingResultCallback เพื่อรับผลลัพธ์

เช่น

Kotlin

val mgr = context.getSystemService(Context.WIFI_RTT_RANGING_SERVICE) as WifiRttManager
val request: RangingRequest = myRequest
mgr.startRanging(request, executor, object : RangingResultCallback() {

    override fun onRangingResults(results: List<RangingResult>) { … }

    override fun onRangingFailure(code: Int) { … }
})

Java

WifiRttManager mgr =
      (WifiRttManager) Context.getSystemService(Context.WIFI_RTT_RANGING_SERVICE);

RangingRequest request ...;
mgr.startRanging(request, executor, new RangingResultCallback() {

  @Override
  public void onRangingFailure(int code) { … }

  @Override
  public void onRangingResults(List<RangingResult> results) { … }
});

การดำเนินการกำหนดระยะจะทำงานไม่พร้อมกัน และผลการวัดระยะ แสดงผลในการเรียกกลับรายการใดรายการหนึ่งของ RangingResultCallback

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

ตีความผลลัพธ์ของระยะ

ผลลัพธ์แต่ละรายการที่แสดงผลโดย callback ของ onRangingResults จะระบุด้วยออบเจ็กต์ RangingResult ในคำขอแต่ละรายการ ให้ทำตามขั้นตอนต่อไปนี้

1. ระบุคำขอ

ระบุคำขอตามข้อมูลที่ให้ไว้ตอนที่สร้าง RangingRequest ซึ่งมักจะเป็นที่อยู่ MAC ที่ระบุไว้ใน ScanResult เพื่อระบุการเข้าถึง คะแนน ที่อยู่ MAC สามารถหาได้จากผลลัพธ์ระยะโดยใช้ getMacAddress()

รายการผลลัพธ์ช่วงอาจเรียงลำดับต่างจากแอปเทียบเท่า (การเข้าถึง จุด) ที่ระบุในคำขอระยะ ดังนั้นคุณควรใช้ที่อยู่ MAC เพื่อ ระบุแอปเทียบเท่า ไม่ใช่ลำดับของผลลัพธ์

2. ตรวจสอบว่าแต่ละการวัดผลสําเร็จหรือไม่

หากต้องการดูว่าการวัดสำเร็จหรือไม่ ให้ใช้ getStatus() ค่าอื่นๆ นอกเหนือจาก STATUS_SUCCESS หมายถึงล้มเหลว หากไม่สำเร็จ หมายความว่าฟิลด์อื่นๆ ทั้งหมดของผลลัพธ์นี้ (ยกเว้นการระบุคำขอด้านบน) ไม่ถูกต้อง และเมธอด get* ที่เกี่ยวข้องจะดำเนินการไม่สำเร็จพร้อมข้อยกเว้น IllegalStateException

3. ดูผลลัพธ์ของการวัดที่สำเร็จแต่ละครั้ง

สำหรับการวัดที่สำเร็จแต่ละครั้ง (RangingResult) คุณสามารถดึงผลลัพธ์ได้ ด้วยเมธอด get ที่เกี่ยวข้องกัน ดังนี้

  • ระยะทางเป็น mm และค่าเบี่ยงเบนมาตรฐานของการวัด

    getDistanceMm()

    getDistanceStdDevMm()

  • RSSI ของแพ็กเก็ตที่ใช้สำหรับการวัด:

    getRssi()

  • เวลาในการวัดเป็นมิลลิวินาที (แสดงเวลานับตั้งแต่เปิดเครื่อง)

    getRangingTimestampMillis()

  • จํานวนการวัดที่พยายามทํา และจํานวนการวัดที่ประสบความสําเร็จ (ซึ่งเป็นข้อมูลสําหรับการวัดระยะทาง)

    getNumAttemptedMeasurements()

    getNumSuccessfulMeasurements()

  • เวลาขั้นต่ำและสูงสุดที่อุปกรณ์ไคลเอ็นต์ต้องรอระหว่าง 11az NTB สัดส่วน:

    getMinTimeBetweenNtbMeasurementsMicros() และ getMaxTimeBetweenNtbMeasurementsMicros() แสดงเวลาต่ำสุดและสูงสุด หากการวัดระยะถัดไปคือ ที่ขอก่อนที่เวลาขั้นต่ำจะผ่านไป จากนั้น API จะส่งคืน ผลการวัดระยะแคช หากมีการขอการวัดระยะทางครั้งถัดไปหลังจากเวลาสูงสุดผ่านไปแล้ว API จะสิ้นสุดเซสชันการวัดระยะทางที่ไม่ทริกเกอร์และเจรจาต่อรองเซสชันการวัดระยะทางใหม่กับสถานีที่ตอบกลับ คุณควรหลีกเลี่ยงการขอเซสชันการจัดระยะใหม่ เนื่องจากจะเป็นการเพิ่ม ค่าใช้จ่ายต่อเวลาการวัดระยะทาง หากต้องการใช้ประโยชน์จากประสิทธิภาพการวัดระยะที่ไม่ใช่แบบทริกเกอร์ของ 802.11az อย่างเต็มที่ ให้ทริกเกอร์คำขอการวัดระยะถัดไประหว่างเวลาการวัดขั้นต่ำและสูงสุดที่ระบุในการวัดRangingResultครั้งก่อนหน้า

  • การซ้ำของช่องการฝึกอบรมแบบยาว (LTF) ที่สถานีตอบกลับและสถานีเริ่มต้นใช้ในส่วนนำหน้าสำหรับผลลัพธ์ NTB ของ IEEE 802.11az มีดังนี้

    get80211azResponderTxLtfRepetitionsCount()

    get80211azInitiatorTxLtfRepetitionsCount()

  • จํานวนสตรีมเวลาเชิงพื้นที่ (STS) ที่ส่งและรับซึ่งสถานีเริ่มต้นใช้สําหรับผลลัพธ์ NTB ของ IEEE 802.11az

    get80211azNumberOfTxSpatialStreams()

    get80211azNumberOfRxSpatialStreams()

อุปกรณ์ Android ที่รองรับ WiFi-RTT

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

จุดเข้าใช้งาน

ผู้ผลิตและรุ่น วันที่ให้การสนับสนุน
Nest Wifi Pro (Wi-Fi 6E) รองรับ
Compulab WILD AP รองรับ
Google Wi-Fi รองรับ
เราเตอร์ Google Nest Wi-Fi รองรับ
Google Nest Wi-Fi Point รองรับ
อารูบา AP-635 รองรับ
Cisco 9130 รองรับ
Cisco 9136 รองรับ
Cisco 9166 รองรับ
Cisco 9164 รองรับ
อารูบา AP-505 รองรับ
อารูบา AP-515 รองรับ
Aruba AP-575 รองรับ
Aruba AP-518 รองรับ
Aruba AP-505H รองรับ
อารูบา AP-565 รองรับ
อารูบา AP-535 รองรับ

โทรศัพท์

ผู้ผลิตและรุ่น รุ่นของ Android
Pixel 6 9.0 ขึ้นไป
Pixel 6 Pro 9.0 ขึ้นไป
Pixel 5 9.0 ขึ้นไป
Pixel 5a 9.0 ขึ้นไป
Pixel 5a 5G 9.0 ขึ้นไป
Xiaomi Mi 10 Pro 9.0 ขึ้นไป
Xiaomi Mi 10 9.0 ขึ้นไป
Xiaomi Redmi Mi 9T Pro 9.0 ขึ้นไป
Xiaomi Mi 9T 9.0 ขึ้นไป
Xiaomi Mi 9 9.0 ขึ้นไป
Xiaomi Mi Note 10 9.0 ขึ้นไป
Xiaomi Mi Note 10 Lite 9.0 ขึ้นไป
Xiaomi Redmi Note 9S 9.0 ขึ้นไป
Xiaomi Redmi Note 9 Pro 9.0 ขึ้นไป
Xiaomi Redmi Note 8T 9.0 ขึ้นไป
Xiaomi Redmi Note 8 9.0 ขึ้นไป
Xiaomi Redmi K30 Pro 9.0 ขึ้นไป
Xiaomi Redmi K20 Pro 9.0 ขึ้นไป
Xiaomi Redmi K20 9.0 ขึ้นไป
Xiaomi Redmi Note 5 Pro 9.0 ขึ้นไป
Xiaomi Mi CC9 Pro 9.0 ขึ้นไป
LG G8X ThinQ 9.0 ขึ้นไป
LG V50S ThinQ 9.0 ขึ้นไป
LG V60 ThinQ 9.0 ขึ้นไป
LG V30 9.0 ขึ้นไป
Samsung Galaxy Note 10+ 5G 9.0 ขึ้นไป
Samsung Galaxy S20+ 5G 9.0 ขึ้นไป
Samsung Galaxy S20+ 9.0 ขึ้นไป
Samsung Galaxy S20 5G 9.0 ขึ้นไป
Samsung Galaxy S20 Ultra 5G 9.0 ขึ้นไป
Samsung Galaxy S20 9.0 ขึ้นไป
Samsung Galaxy Note 10+ 9.0 ขึ้นไป
Samsung Galaxy Note 10 5G 9.0 ขึ้นไป
Samsung Galaxy Note 10 9.0 ขึ้นไป
Samsung A9 Pro 9.0 ขึ้นไป
Google Pixel 4 XL 9.0 ขึ้นไป
Google Pixel 4 9.0 ขึ้นไป
Google Pixel 4a 9.0 ขึ้นไป
Google Pixel 3 XL 9.0 ขึ้นไป
Google Pixel 3 9.0 ขึ้นไป
Google Pixel 3a XL 9.0 ขึ้นไป
Google Pixel 3a 9.0 ขึ้นไป
Google Pixel 2 XL 9.0 ขึ้นไป
Google Pixel 2 9.0 ขึ้นไป
Google Pixel 1 XL 9.0 ขึ้นไป
Google Pixel 1 9.0 ขึ้นไป
Poco X2 9.0 ขึ้นไป
Sharp Aquos R3 SH-04L 9.0 ขึ้นไป

อุปกรณ์สำหรับร้านค้าปลีก คลังสินค้า และศูนย์กระจายสินค้า

ผู้ผลิตและรุ่น รุ่นของ Android
Zebra PS20 10.0 ขึ้นไป
Zebra TC52/TC52HC 10.0 ขึ้นไป
ม้าลาย TC57 10.0 ขึ้นไป
Zebra TC72 10.0 ขึ้นไป
Zebra TC77 10.0 ขึ้นไป
ม้าลาย MC93 10.0 ขึ้นไป
ม้าลาย TC8300 10.0 ขึ้นไป
ม้าลาย VC8300 10.0 ขึ้นไป
Zebra EC30 10.0 ขึ้นไป
Zebra ET51 10.0 ขึ้นไป
ม้าลาย ET56 10.0 ขึ้นไป
ม้าลาย L10 10.0 ขึ้นไป
Zebra CC600/CC6000 10.0 ขึ้นไป
ม้าลาย MC3300X 10.0 ขึ้นไป
Zebra MC330x 10.0 ขึ้นไป
ม้าลาย TC52X 10.0 ขึ้นไป
Zebra TC57x 10.0 ขึ้นไป
Zebra EC50 (LAN และ HC) 10.0 ขึ้นไป
Zebra EC55 (WAN) 10.0 ขึ้นไป
Zebra WT6300 10.0 ขึ้นไป
Skorpio X5 10.0 ขึ้นไป