คุณสามารถใช้ฟังก์ชันตำแหน่ง Wi-Fi ที่ให้บริการโดย Wi-Fi RTT (Round-Trip-Time) API เพื่อวัดระยะทางไปยังจุดเข้าใช้งาน Wi-Fi ที่อยู่ใกล้เคียงและอุปกรณ์ Wi-Fi Aware ของเพียร์
หากวัดระยะทางไปยังจุดเข้าใช้งานตั้งแต่ 3 จุดขึ้นไป คุณสามารถใช้อัลกอริทึมการหาตำแหน่งโดยประมาณเพื่อประมาณตำแหน่งของอุปกรณ์ที่ตรงกับค่าการวัดเหล่านั้นมากที่สุด โดยปกติแล้ว ผลลัพธ์จะมีความแม่นยำภายใน 1-2 เมตร
ความแม่นยำนี้ช่วยให้คุณพัฒนาบริการตามตำแหน่งที่ละเอียดยิ่งขึ้นได้ เช่น การนำทางในอาคาร การควบคุมด้วยเสียงที่กำจัดความกำกวม (เช่น "เปิดไฟนี้") และข้อมูลตามตำแหน่ง (เช่น "มีข้อเสนอพิเศษสำหรับผลิตภัณฑ์นี้ไหม")
อุปกรณ์ที่ส่งคำขอไม่จำเป็นต้องเชื่อมต่อกับจุดเข้าใช้งานเพื่อวัดระยะทางด้วย RTT ของ Wi-Fi เพื่อรักษาความเป็นส่วนตัว เฉพาะอุปกรณ์ที่ขอเท่านั้นที่จะระบุระยะทางไปยังจุดเข้าใช้งานได้ ส่วนจุดเข้าใช้งานจะไม่มีข้อมูลนี้ การดำเนินการ RTT ของ Wi-Fi จะใช้ได้ไม่จำกัดสำหรับแอปที่ทำงานอยู่เบื้องหน้า แต่จะถูกจำกัดสำหรับแอปที่ทำงานอยู่เบื้องหลัง
RTT ของ Wi-Fi และความสามารถการวัดเวลาอย่างละเอียด (FTM) ที่เกี่ยวข้องจะระบุไว้ในมาตรฐาน IEEE 802.11-2016 RTT ของ Wi-Fi ต้องใช้การวัดเวลาที่แม่นยำซึ่ง FTM ระบุ เนื่องจากจะคำนวณระยะทางระหว่างอุปกรณ์ 2 เครื่องโดยการวัดเวลาที่แพ็กเก็ตใช้ในการเดินทางไปและกลับระหว่างอุปกรณ์ 2 เครื่อง แล้วคูณเวลานั้นด้วยความเร็วของแสง
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 เพื่อให้ข้อมูลเกี่ยวกับค่าต่ำสุดและสูงสุดที่สามารถใช้สำหรับช่วงเวลาระหว่างการวัดช่วง ทำให้เหลือช่วงเวลาที่แน่นอนในการควบคุมของแอป
ข้อกำหนด
- ฮาร์ดแวร์ของอุปกรณ์ที่ส่งคำขอระยะต้องใช้มาตรฐาน 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
แทน - แอปต้องค้นหาช่วงของจุดเข้าใช้งานขณะที่แอปแสดงอยู่หรืออยู่ในบริการที่ทำงานอยู่เบื้องหน้า แอปไม่สามารถเข้าถึงข้อมูลตำแหน่งจากเบื้องหลัง
- จุดเข้าใช้งานต้องใช้มาตรฐาน 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
มีทั้ง AP ที่รองรับ IEEE 802.11mc (is80211mcResponder()
) และ IEEE 802.11az ที่ไม่อิงตามทริกเกอร์ (is80211azNtbResponder()
) อุปกรณ์ที่รองรับย่านความถี่ 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 ปิดอยู่ แอปพลิเคชันขอการดำเนินการวัดระยะทางมากเกินไปและถูกจำกัด หรือปัญหาเกี่ยวกับสิทธิ์ - เมื่อการดำเนินการกำหนดระยะเสร็จสมบูรณ์ ระบบจะเรียกใช้ Callback
onRangingResults
พร้อมรายการผลลัพธ์ที่ตรงกับรายการคำขอ โดยผลลัพธ์ 1 รายการสำหรับแต่ละคำขอ ลำดับของผลลัพธ์ไม่จำเป็นต้องตรงกับลำดับของคำขอ โปรดทราบว่าการดำเนินการช่วงอาจเสร็จสมบูรณ์ แต่ผลลัพธ์แต่ละรายการอาจยังคงบ่งชี้ว่าการวัดค่านั้นไม่สำเร็จ
ตีความผลลัพธ์การระบุตำแหน่ง
ผลลัพธ์แต่ละรายการที่แสดงโดยการเรียกกลับ onRangingResults
จะระบุโดยออบเจ็กต์ RangingResult
ทำตามขั้นตอนต่อไปนี้ในคำขอแต่ละรายการ
1. ระบุคำขอ
ระบุคำขอตามข้อมูลที่ให้ไว้เมื่อสร้าง RangingRequest
ซึ่งมักจะเป็นที่อยู่ MAC ที่ระบุไว้ใน ScanResult
ซึ่งระบุจุดเข้าใช้งาน ที่อยู่ MAC จะได้จากผลลัพธ์ช่วงโดยใช้เมธอด getMacAddress()
รายการผลลัพธ์ของการวัดระยะอาจเรียงลำดับไม่เหมือนกับอุปกรณ์ใกล้เคียง (จุดเข้าใช้งาน) ที่ระบุไว้ในคำขอการวัดระยะ คุณจึงควรใช้ที่อยู่ MAC เพื่อระบุอุปกรณ์ใกล้เคียง ไม่ใช่ลำดับของผลลัพธ์
2. ตรวจสอบว่าแต่ละการวัดผลสําเร็จหรือไม่
หากต้องการทราบว่าการวัดสำเร็จหรือไม่ ให้ใช้เมธอด getStatus()
ค่าอื่นๆ นอกเหนือจาก STATUS_SUCCESS
บ่งบอกถึงความล้มเหลว หากไม่สำเร็จ หมายความว่าฟิลด์อื่นๆ ทั้งหมดของผลลัพธ์นี้ (ยกเว้นการระบุคำขอด้านบน) ไม่ถูกต้อง และเมธอด get*
ที่เกี่ยวข้องจะดำเนินการไม่สำเร็จพร้อมข้อยกเว้น IllegalStateException
3. รับผลลัพธ์ของการวัดที่ประสบความสำเร็จแต่ละรายการ
สําหรับการวัดผลที่ประสบความสําเร็จแต่ละครั้ง (RangingResult
) คุณสามารถเรียกค่าผลลัพธ์ด้วยเมธอด get
ที่เกี่ยวข้อง ดังนี้
ระยะทางเป็น mm และค่าเบี่ยงเบนมาตรฐานของการวัด
RSSI ของแพ็กเก็ตที่ใช้วัดค่า
เวลาเป็นมิลลิวินาทีที่ใช้การวัด (ระบุเวลาตั้งแต่เปิดเครื่อง)
จํานวนการวัดที่พยายามทํา และจํานวนการวัดที่ประสบความสําเร็จ (ซึ่งเป็นข้อมูลสําหรับการวัดระยะทาง)
ระยะเวลาขั้นต่ำและสูงสุดที่อุปกรณ์ไคลเอ็นต์ต้องรอระหว่างการวัด 11az NTB
getMinTimeBetweenNtbMeasurementsMicros()
และgetMaxTimeBetweenNtbMeasurementsMicros()
แสดงเวลาต่ำสุดและสูงสุด หากมีการขอวัดช่วงถัดไปก่อนที่จะเลยเวลาขั้นต่ำแล้ว API จะแสดงผลผลลัพธ์ของช่วงที่แคชไว้ หากมีการขอการวัดระยะถัดไปหลังจากที่เลยเวลาสูงสุดไปแล้ว API จะยุติเซสชันระยะที่ไม่ใช่ทริกเกอร์ และเจรจาเซสชันการกำหนดระยะใหม่กับสถานีตอบสนอง คุณควรหลีกเลี่ยงการขอเซสชันการวัดระยะทางใหม่ เนื่องจากจะเพิ่มเวลาในการวัดระยะทาง เพื่อใช้ประโยชน์จากประสิทธิภาพช่วง 802.11az ที่ไม่ใช่ทริกเกอร์อย่างเต็มที่ ให้เรียกใช้คำขอระยะถัดไประหว่างเวลาการวัดต่ำสุดและสูงสุดที่ระบุในการวัดRangingResult
ก่อนหน้าการกล่าวซ้ำๆ เกี่ยวกับ Long Training Field (LTF) ที่ผู้ตอบและสถานีเริ่มดำเนินการใช้คำกล่าวเบื้องต้นสำหรับผลลัพธ์ NTB IEEE 802.11az มีดังนี้
จํานวนสตรีมเวลาเชิงพื้นที่ (STS) ที่ส่งและรับซึ่งสถานีเริ่มต้นใช้สําหรับผลลัพธ์ NTB ของ IEEE 802.11az
อุปกรณ์ Android ที่รองรับ WiFi-RTT
ตารางต่อไปนี้แสดงโทรศัพท์ จุดเข้าใช้งาน และอุปกรณ์ค้าปลีก คลังสินค้า และศูนย์กระจายสินค้าที่รองรับ WiFi-RTT ข้อมูลเหล่านี้เป็นเพียงตัวอย่างบางส่วน เราขอแนะนำให้ติดต่อเราเพื่อแสดงผลิตภัณฑ์ที่รองรับ RTT ที่นี่
จุดเข้าใช้งาน
ผู้ผลิตและรุ่น | วันที่ขอรับการสนับสนุน |
---|---|
Nest Wifi Pro (Wi-Fi 6E) | รองรับ |
Compulab WILD AP | รองรับ |
Google Wi-Fi | รองรับ |
เราเตอร์ Google Nest Wi-Fi | รองรับ |
Google Nest Wi-Fi Point | รองรับ |
Aruba AP-635 | รองรับ |
Cisco 9130 | รองรับ |
Cisco 9136 | รองรับ |
Cisco 9166 | รองรับ |
Cisco 9164 | รองรับ |
อารูบา AP-505 | รองรับ |
Aruba AP-515 | รองรับ |
Aruba AP-575 | รองรับ |
อารูบา 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 ขึ้นไป |
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 ขึ้นไป |
ม้าลาย ET51 | 10.0 ขึ้นไป |
ม้าลาย ET56 | 10.0 ขึ้นไป |
Zebra L10 | 10.0 ขึ้นไป |
Zebra CC600/CC6000 | 10.0 ขึ้นไป |
ม้าลาย MC3300X | 10.0 ขึ้นไป |
ม้าลาย MC330X | 10.0 ขึ้นไป |
Zebra TC52x | 10.0 ขึ้นไป |
Zebra TC57x | 10.0 ขึ้นไป |
Zebra EC50 (LAN และ HC) | 10.0 ขึ้นไป |
Zebra EC55 (WAN) | 10.0 ขึ้นไป |
ม้าลาย WT6300 | 10.0 ขึ้นไป |
Skorpio X5 | 10.0 ขึ้นไป |