คุณสามารถใช้ฟังก์ชันตำแหน่ง 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);
ดูข้อมูลเพิ่มเติมได้ที่การออกอากาศ
สร้างคำขอการจัดประเภท
ระบบจะสร้างคำขอช่วง
(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
ที่เกี่ยวข้องได้
ระยะทางเป็นมม. และค่าเบี่ยงเบนมาตรฐานของการวัด
RSSI ของแพ็กเก็ตที่ใช้สำหรับการวัด
เวลาเป็นมิลลิวินาทีที่ทำการวัด (ระบุเวลา ตั้งแต่เปิดเครื่อง):
จํานวนการวัดที่พยายามทําและจํานวนการวัด ที่สําเร็จ (และใช้เป็นพื้นฐานในการวัดระยะทาง):
เวลาขั้นต่ำและสูงสุดที่อุปกรณ์ไคลเอ็นต์ต้องรอระหว่างการวัด NTB ของ 11az
getMinTimeBetweenNtbMeasurementsMicros()
และgetMaxTimeBetweenNtbMeasurementsMicros()
จะแสดงเวลาต่ำสุดและสูงสุด หากมีการขอการวัดระยะครั้งถัดไปก่อนเวลาขั้นต่ำจะผ่านไป API จะแสดงผลการวัดระยะที่แคชไว้ หากมีการขอการวัดระยะครั้งถัดไปหลังจากเวลาสูงสุดผ่านไปแล้ว API จะสิ้นสุดเซสชันการวัดระยะที่ไม่ใช่ทริกเกอร์ และเจรจาเซสชันการวัดระยะใหม่กับสถานีที่ตอบกลับ คุณควรหลีกเลี่ยงการขอเซสชันการวัดระยะใหม่ เนื่องจากจะเพิ่ม ค่าใช้จ่ายในการวัดระยะ หากต้องการใช้ประโยชน์จากประสิทธิภาพการวัดระยะตาม 802.11az แบบไม่ใช้ทริกเกอร์อย่างเต็มที่ ให้ทริกเกอร์คำขอการวัดระยะถัดไป ระหว่างเวลาการวัดขั้นต่ำและสูงสุดที่ระบุไว้ในRangingResult
การวัดก่อนหน้าการทำซ้ำฟิลด์การฝึกแบบยาว (LTF) ที่สถานีตอบและสถานีเริ่มต้น ใช้ในคำนำสำหรับผลลัพธ์ NTB ของ IEEE 802.11az:
จำนวนสตรีมเวลาเชิงพื้นที่ (STS) ที่ส่งและรับซึ่งสถานีเริ่มต้น ใช้สำหรับผลลัพธ์ NTB ของ IEEE 802.11az
อุปกรณ์ 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 ขึ้นไป |