Android WiFi设备到AP往返时间(RTT)

时间:2016-09-22 13:02:52

标签: android wifi

使用Android API-Level 21,分别为SDK添加了一些测量Wifi roundtrip time(RTT)的方法:

但我找不到任何有关如何使用API​​来衡量RTT的信息。

相关课程RttManager仍标记为系统API。

有没有办法执行Device-To-AP RTT测量?

2 个答案:

答案 0 :(得分:10)

Android P开始,现在可以使用适用于Wi-Fi RTT(IEEE 802.11mc)的公共API。

WiFiRttManager

将以下内容添加到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调用:

Android RttManagerCompat

lib使用Java Reflection来访问API,基本上它似乎有效。

更新:

  • 该应用必须安装在system / priv-app / folder
  • 因此手机需要扎根。

更新

  • Android P提供了一个公共API,使该库过时。