使用Android API-Level 21
,分别为SDK添加了一些测量Wifi roundtrip time
(RTT)的方法:
但我找不到任何有关如何使用API来衡量RTT
的信息。
相关课程RttManager仍标记为系统API。
有没有办法执行Device-To-AP RTT
测量?
答案 0 :(得分:10)
从Android P
开始,现在可以使用适用于Wi-Fi RTT(IEEE 802.11mc)的公共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
答案 1 :(得分:3)
我写了一个小的库来包装Compat类中隐藏的API调用:
lib使用Java Reflection来访问API,基本上它似乎有效。
更新:
更新