随着 Android API-Level 21
,SDK 分别添加了 23 种测量 Wifi roundtrip time
(RTT) 的方法:
但是我没有找到任何关于如何使用 API 来测量 RTT
的信息。
相关类RttManager仍标记为系统 API。
有什么方法可以执行Device-To-AP RTT
测量吗?
最佳答案
从 Android P
开始,Wi-Fi RTT (IEEE 802.11mc) 的公共(public) API 现已可用。
将以下内容添加到您的 AndroidManifest:
<manifest ...>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-feature android:name="android.hardware.wifi.rtt" />
...
</manifest>
获取 WiFiRttManager 实例:
final WifiRttManager rttManager = (WifiRttManager) context.getSystemService(Context.WIFI_RTT_RANGING_SERVICE);
检查设备是否支持 Rtt 测量:
rttManager.isAvailable();
执行测距:
// A ScanResult can be retrieved by e.g. perform a WiFi scan for WiFi's in range -> https://developer.android.com/reference/android/net/wifi/ScanResult.html
final RangingRequest request = new RangingRequest.Builder()
.addAccessPoint(scanResult)
.build();
final RangingResultCallback callback = new RangingResultCallback() {
public void onRangingResults(List<RangingResult> results) {
// Handle result, e.g. get distance to Access Point
}
public void onRangingFailure(int code) {
// Handle failure
}
};
// Start ranging and return result on main thread.
rttManager.startRanging(request, callback, null);
请注意,接入点还必须支持 Wi-Fi RTT (IEEE 802.11mc)!
更新:示例应用可在此处找到: Android Wifi RttManager sample
关于Android WiFi 设备到 AP 的往返时间 (RTT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39639871/