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

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

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

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

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

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

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

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

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

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

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

ข้อกำหนด

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

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

Kotlin

context.packageManager.hasSystemFeature(PackageManager.FEATURE_WIFI_RTT)

Java

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

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

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

ความพร้อมใช้งานของ RTT ผ่าน Wi-Fi อาจเปลี่ยนแปลงได้ทุกเมื่อ แอปของคุณควรลงทะเบียน BroadcastReceiver เพื่อรับ ACTION_WIFI_RTT_STATE_CHANGED ซึ่งจะส่งเมื่อความพร้อมเปลี่ยนแปลง เมื่อแอปได้รับ Broadcast 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);
RTT ของ Wi-Fi พร้อมใช้งาน แต่จะไม่ได้รับการแจ้งเตือนหากความพร้อมใช้งานเปลี่ยนแปลงไป

ดูข้อมูลเพิ่มเติมได้ที่การออกอากาศ

สร้างคำขอการจัดประเภท

ระบบจะสร้างคำขอช่วง (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 รองรับ อุปกรณ์ที่รองรับการวัดระยะ NTB ของ IEEE 802.11az จะทำการวัดระยะ 802.11mc หรือ 802.11az โดยขึ้นอยู่กับความสามารถของ AP และจะใช้ 802.11az เป็นค่าเริ่มต้นเมื่อ AP รองรับทั้ง 2 อย่าง อุปกรณ์ที่ไม่รองรับ IEEE 802.11az จะทำการวัดระยะทั้งหมดโดยใช้โปรโตคอล IEEE 802.11mc

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

ตีความผลลัพธ์การวัดระยะ

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

1. ระบุคำขอ

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

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

2. พิจารณาว่าการวัดแต่ละครั้งสำเร็จหรือไม่

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

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

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

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

    getDistanceMm()

    getDistanceStdDevMm()

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

    getRssi()

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

    getRangingTimestampMillis()

  • จํานวนการวัดที่พยายามทําและจํานวนการวัด ที่สําเร็จ (และใช้เป็นพื้นฐานในการวัดระยะทาง):

    getNumAttemptedMeasurements()

    getNumSuccessfulMeasurements()

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

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

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

    get80211azResponderTxLtfRepetitionsCount()

    get80211azInitiatorTxLtfRepetitionsCount()

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

    get80211azNumberOfTxSpatialStreams()

    get80211azNumberOfRxSpatialStreams()

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

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

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

ผู้ผลิตและรุ่น วันที่ขอรับการสนับสนุน โปรโตคอล
Nest Wifi Pro (Wi-Fi 6E) รองรับ mc
Compulab WILD AP รองรับ mc
Google Wi-Fi รองรับ mc
เราเตอร์ Google Nest Wifi รองรับ mc
Google Nest Wifi Point รองรับ mc
Aruba AP-635 รองรับ mc
Cisco 9130 รองรับ mc
Cisco 9136 รองรับ mc
Cisco 9166 รองรับ mc
Cisco 9164 รองรับ mc
Cisco CW9172I รองรับ mc/az
Cisco CW9172H รองรับ mc/az
Cisco CW9176I รองรับ mc/az
Cisco CW9178I รองรับ mc/az
Aruba AP-505 รองรับ mc
Aruba AP-515 รองรับ mc
Aruba AP-575 รองรับ mc
Aruba AP-518 รองรับ mc
Aruba AP-505H รองรับ mc
Aruba AP-565 รองรับ mc
Aruba AP-535 รองรับ mc
Aruba AP567 รองรับ mc
Aruba AP577 รองรับ mc
Aruba AP555 รองรับ mc
Aruba AP635 รองรับ mc
Aruba AP655 รองรับ mc
Aruba AP615 รองรับ mc
Aruba AP734 รองรับ mc/az
Aruba AP735 รองรับ mc/az
Aruba AP754 รองรับ mc/az
Aruba AP755 รองรับ mc/az

โทรศัพท์

ผู้ผลิตและรุ่น เวอร์ชัน Android
Google Pixel 9 Pro XL 14+
Google Pixel 9 14+
Google Pixel 9 Pro 14+
Google Pixel 9 Pro XL 14+
Google Pixel 7a 14+
Google Pixel 7 14+
Google Pixel 8 14+
Google Pixel 8 Pro 14+
Google Pixel 8a 14+
Samsung SM-S918B 14+
Samsung SM-A515F 14+
Google Pixel 9 Pro 14+
Samsung SM-A546E 14+
Samsung SM-S928B 14+
Samsung SM-A217F 14+
Samsung SM-A715F 14+
Samsung SM-A528B 14+
Samsung SM-A135F 14+
Samsung SM-S911B 14+
Xiaomi 21091116AI 14+
Google Pixel 9 14+
Samsung SM-A127F 14+
Google Pixel 7 Pro 14+
Samsung SM-A556E 14+
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 ขึ้นไป
Zebra TC57 10.0 ขึ้นไป
Zebra TC72 10.0 ขึ้นไป
Zebra TC77 10.0 ขึ้นไป
Zebra MC93 10.0 ขึ้นไป
Zebra TC8300 10.0 ขึ้นไป
Zebra VC8300 10.0 ขึ้นไป
Zebra EC30 10.0 ขึ้นไป
Zebra ET51 10.0 ขึ้นไป
Zebra ET56 10.0 ขึ้นไป
Zebra L10 10.0 ขึ้นไป
Zebra CC600/CC6000 10.0 ขึ้นไป
Zebra MC3300x 10.0 ขึ้นไป
Zebra MC330x 10.0 ขึ้นไป
Zebra 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 ขึ้นไป